From b345a781d75cc6c06f94d19a2ee0ae46296630c3 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 13 Jan 2017 12:41:27 -0800 Subject: [PATCH 01/92] Add test for class from external module is used in union --- .../reference/metadataOfClassFromAlias.js | 49 +++++++++++++++++++ .../metadataOfClassFromAlias.symbols | 28 +++++++++++ .../reference/metadataOfClassFromAlias.types | 31 ++++++++++++ .../compiler/metadataOfClassFromAlias.ts | 18 +++++++ 4 files changed, 126 insertions(+) create mode 100644 tests/baselines/reference/metadataOfClassFromAlias.js create mode 100644 tests/baselines/reference/metadataOfClassFromAlias.symbols create mode 100644 tests/baselines/reference/metadataOfClassFromAlias.types create mode 100644 tests/cases/compiler/metadataOfClassFromAlias.ts diff --git a/tests/baselines/reference/metadataOfClassFromAlias.js b/tests/baselines/reference/metadataOfClassFromAlias.js new file mode 100644 index 00000000000..9e229c2ca38 --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias.js @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/metadataOfClassFromAlias.ts] //// + +//// [auxiliry.ts] + +export class SomeClass { + field: string; +} + +//// [test.ts] +import { SomeClass } from './auxiliry'; +function annotation(): PropertyDecorator { + return (target: any): void => { }; +} +export class ClassA { + @annotation() array: SomeClass | null; +} + +//// [auxiliry.js] +"use strict"; +var SomeClass = (function () { + function SomeClass() { + } + return SomeClass; +}()); +exports.SomeClass = SomeClass; +//// [test.js] +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +function annotation() { + return function (target) { }; +} +var ClassA = (function () { + function ClassA() { + } + return ClassA; +}()); +__decorate([ + annotation(), + __metadata("design:type", auxiliry_1.SomeClass) +], ClassA.prototype, "array", void 0); +exports.ClassA = ClassA; diff --git a/tests/baselines/reference/metadataOfClassFromAlias.symbols b/tests/baselines/reference/metadataOfClassFromAlias.symbols new file mode 100644 index 00000000000..2cf6ca18393 --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias.symbols @@ -0,0 +1,28 @@ +=== tests/cases/compiler/auxiliry.ts === + +export class SomeClass { +>SomeClass : Symbol(SomeClass, Decl(auxiliry.ts, 0, 0)) + + field: string; +>field : Symbol(SomeClass.field, Decl(auxiliry.ts, 1, 24)) +} + +=== tests/cases/compiler/test.ts === +import { SomeClass } from './auxiliry'; +>SomeClass : Symbol(SomeClass, Decl(test.ts, 0, 8)) + +function annotation(): PropertyDecorator { +>annotation : Symbol(annotation, Decl(test.ts, 0, 39)) +>PropertyDecorator : Symbol(PropertyDecorator, Decl(lib.d.ts, --, --)) + + return (target: any): void => { }; +>target : Symbol(target, Decl(test.ts, 2, 12)) +} +export class ClassA { +>ClassA : Symbol(ClassA, Decl(test.ts, 3, 1)) + + @annotation() array: SomeClass | null; +>annotation : Symbol(annotation, Decl(test.ts, 0, 39)) +>array : Symbol(ClassA.array, Decl(test.ts, 4, 21)) +>SomeClass : Symbol(SomeClass, Decl(test.ts, 0, 8)) +} diff --git a/tests/baselines/reference/metadataOfClassFromAlias.types b/tests/baselines/reference/metadataOfClassFromAlias.types new file mode 100644 index 00000000000..1381ab7afac --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/auxiliry.ts === + +export class SomeClass { +>SomeClass : SomeClass + + field: string; +>field : string +} + +=== tests/cases/compiler/test.ts === +import { SomeClass } from './auxiliry'; +>SomeClass : typeof SomeClass + +function annotation(): PropertyDecorator { +>annotation : () => PropertyDecorator +>PropertyDecorator : PropertyDecorator + + return (target: any): void => { }; +>(target: any): void => { } : (target: any) => void +>target : any +} +export class ClassA { +>ClassA : ClassA + + @annotation() array: SomeClass | null; +>annotation() : PropertyDecorator +>annotation : () => PropertyDecorator +>array : SomeClass +>SomeClass : SomeClass +>null : null +} diff --git a/tests/cases/compiler/metadataOfClassFromAlias.ts b/tests/cases/compiler/metadataOfClassFromAlias.ts new file mode 100644 index 00000000000..c7407c8d766 --- /dev/null +++ b/tests/cases/compiler/metadataOfClassFromAlias.ts @@ -0,0 +1,18 @@ +// @experimentalDecorators: true +// @emitDecoratorMetadata: true +// @target: es5 +// @module: commonjs + +// @filename: auxiliry.ts +export class SomeClass { + field: string; +} + +//@filename: test.ts +import { SomeClass } from './auxiliry'; +function annotation(): PropertyDecorator { + return (target: any): void => { }; +} +export class ClassA { + @annotation() array: SomeClass | null; +} \ No newline at end of file From 839dde3cf293aab280c9680ef60f54bd0cd8525f Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 17 Jan 2017 11:20:50 -0800 Subject: [PATCH 02/92] Mark as referenced aliases in Union that will get emitted as part of decorator metadaa Fixes #13449 --- src/compiler/checker.ts | 74 +++++++++++++++++-- src/compiler/transformers/ts.ts | 2 + .../reference/metadataOfClassFromAlias.js | 1 + .../reference/metadataOfClassFromAlias2.js | 49 ++++++++++++ .../metadataOfClassFromAlias2.symbols | 28 +++++++ .../reference/metadataOfClassFromAlias2.types | 31 ++++++++ .../compiler/metadataOfClassFromAlias2.ts | 18 +++++ 7 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 tests/baselines/reference/metadataOfClassFromAlias2.js create mode 100644 tests/baselines/reference/metadataOfClassFromAlias2.symbols create mode 100644 tests/baselines/reference/metadataOfClassFromAlias2.types create mode 100644 tests/cases/compiler/metadataOfClassFromAlias2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b4f8fdfeab5..eed762a9036 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -16732,7 +16732,10 @@ namespace ts { * marked as referenced to prevent import elision. */ function markTypeNodeAsReferenced(node: TypeNode) { - const typeName = node && getEntityNameFromTypeNode(node); + markEntityNameOrEntityExpressionAsReference(node && getEntityNameFromTypeNode(node)); + } + + function markEntityNameOrEntityExpressionAsReference(typeName: EntityNameOrEntityNameExpression) { const rootName = typeName && getFirstIdentifier(typeName); const rootSymbol = rootName && resolveName(rootName, rootName.text, (typeName.kind === SyntaxKind.Identifier ? SymbolFlags.Type : SymbolFlags.Namespace) | SymbolFlags.Alias, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); if (rootSymbol @@ -16743,6 +16746,65 @@ namespace ts { } } + function markDecoratorMedataDataTypeNodeAsReferenced(node: TypeNode): void { + const entityNameOrToken = getEntityNameForDecoratoryMetadata(node); + if (entityNameOrToken && isEntityName(entityNameOrToken)) { + markEntityNameOrEntityExpressionAsReference(entityNameOrToken); + } + } + + type voidUndefinedNullOrNeverTypeNode = Token; + + function getEntityNameForDecoratoryMetadata(node: TypeNode): EntityName | voidUndefinedNullOrNeverTypeNode { + if (node) { + switch (node.kind) { + case SyntaxKind.IntersectionType: + case SyntaxKind.UnionType: + let commonEntityName: EntityName | voidUndefinedNullOrNeverTypeNode; + for (const typeNode of (node).types) { + const individualEntityName = getEntityNameForDecoratoryMetadata(typeNode); + if (!individualEntityName) { + // Individual is something like string number + // So it would be serialized to either that type or object + // Safe to return here + return undefined; + } + + const isCommonEntityName = commonEntityName && isEntityName(commonEntityName); + const isIndividualEntityName = isEntityName(individualEntityName); + if (isCommonEntityName && isIndividualEntityName) { + // Note this is in sync with the transformation that happens for type node. + // Keep this in sync with serializeUnionOrIntersectionType + // Verify if they refer to same entity and is identifier + // return undefined if they dont match because we would emit object + if (!isIdentifier(commonEntityName) || + !isIdentifier(individualEntityName) || + commonEntityName.text !== individualEntityName.text) { + return undefined; + } + } + else if (!isCommonEntityName) { + commonEntityName = individualEntityName; + } + } + return commonEntityName; + + case SyntaxKind.ParenthesizedType: + return getEntityNameForDecoratoryMetadata((node).type); + + case SyntaxKind.TypeReference: + return (node).typeName; + + case SyntaxKind.VoidKeyword: + case SyntaxKind.UndefinedKeyword: + case SyntaxKind.NullKeyword: + case SyntaxKind.NeverKeyword: + return node; + + } + } + } + function getParameterTypeNodeForDecoratorCheck(node: ParameterDeclaration): TypeNode { return node.dotDotDotToken ? getRestParameterElementType(node.type) : node.type; } @@ -16778,7 +16840,7 @@ namespace ts { const constructor = getFirstConstructorWithBody(node); if (constructor) { for (const parameter of constructor.parameters) { - markTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); } } break; @@ -16787,17 +16849,17 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: for (const parameter of (node).parameters) { - markTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); } - markTypeNodeAsReferenced((node).type); + markDecoratorMedataDataTypeNodeAsReferenced((node).type); break; case SyntaxKind.PropertyDeclaration: - markTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node)); + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node)); break; case SyntaxKind.Parameter: - markTypeNodeAsReferenced((node).type); + markDecoratorMedataDataTypeNodeAsReferenced((node).type); break; } } diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index e2b8b8fe2ec..a27b9921a4e 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -1739,6 +1739,8 @@ namespace ts { } function serializeUnionOrIntersectionType(node: UnionOrIntersectionTypeNode): SerializedTypeNode { + // Note when updating logic here also update getEntityNameForDecoratoryMetadata + // so that aliases can be marked as referenced let serializedUnion: SerializedTypeNode; for (const typeNode of node.types) { const serializedIndividual = serializeTypeNode(typeNode); diff --git a/tests/baselines/reference/metadataOfClassFromAlias.js b/tests/baselines/reference/metadataOfClassFromAlias.js index 9e229c2ca38..bf3d8bf860f 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias.js +++ b/tests/baselines/reference/metadataOfClassFromAlias.js @@ -34,6 +34,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +var auxiliry_1 = require("./auxiliry"); function annotation() { return function (target) { }; } diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.js b/tests/baselines/reference/metadataOfClassFromAlias2.js new file mode 100644 index 00000000000..70488af2b7e --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias2.js @@ -0,0 +1,49 @@ +//// [tests/cases/compiler/metadataOfClassFromAlias2.ts] //// + +//// [auxiliry.ts] + +export class SomeClass { + field: string; +} + +//// [test.ts] +import { SomeClass } from './auxiliry'; +function annotation(): PropertyDecorator { + return (target: any): void => { }; +} +export class ClassA { + @annotation() array: SomeClass | null | string; +} + +//// [auxiliry.js] +"use strict"; +var SomeClass = (function () { + function SomeClass() { + } + return SomeClass; +}()); +exports.SomeClass = SomeClass; +//// [test.js] +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +function annotation() { + return function (target) { }; +} +var ClassA = (function () { + function ClassA() { + } + return ClassA; +}()); +__decorate([ + annotation(), + __metadata("design:type", Object) +], ClassA.prototype, "array", void 0); +exports.ClassA = ClassA; diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.symbols b/tests/baselines/reference/metadataOfClassFromAlias2.symbols new file mode 100644 index 00000000000..ab183452f20 --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias2.symbols @@ -0,0 +1,28 @@ +=== tests/cases/compiler/auxiliry.ts === + +export class SomeClass { +>SomeClass : Symbol(SomeClass, Decl(auxiliry.ts, 0, 0)) + + field: string; +>field : Symbol(SomeClass.field, Decl(auxiliry.ts, 1, 24)) +} + +=== tests/cases/compiler/test.ts === +import { SomeClass } from './auxiliry'; +>SomeClass : Symbol(SomeClass, Decl(test.ts, 0, 8)) + +function annotation(): PropertyDecorator { +>annotation : Symbol(annotation, Decl(test.ts, 0, 39)) +>PropertyDecorator : Symbol(PropertyDecorator, Decl(lib.d.ts, --, --)) + + return (target: any): void => { }; +>target : Symbol(target, Decl(test.ts, 2, 12)) +} +export class ClassA { +>ClassA : Symbol(ClassA, Decl(test.ts, 3, 1)) + + @annotation() array: SomeClass | null | string; +>annotation : Symbol(annotation, Decl(test.ts, 0, 39)) +>array : Symbol(ClassA.array, Decl(test.ts, 4, 21)) +>SomeClass : Symbol(SomeClass, Decl(test.ts, 0, 8)) +} diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.types b/tests/baselines/reference/metadataOfClassFromAlias2.types new file mode 100644 index 00000000000..75807845d1a --- /dev/null +++ b/tests/baselines/reference/metadataOfClassFromAlias2.types @@ -0,0 +1,31 @@ +=== tests/cases/compiler/auxiliry.ts === + +export class SomeClass { +>SomeClass : SomeClass + + field: string; +>field : string +} + +=== tests/cases/compiler/test.ts === +import { SomeClass } from './auxiliry'; +>SomeClass : typeof SomeClass + +function annotation(): PropertyDecorator { +>annotation : () => PropertyDecorator +>PropertyDecorator : PropertyDecorator + + return (target: any): void => { }; +>(target: any): void => { } : (target: any) => void +>target : any +} +export class ClassA { +>ClassA : ClassA + + @annotation() array: SomeClass | null | string; +>annotation() : PropertyDecorator +>annotation : () => PropertyDecorator +>array : string | SomeClass +>SomeClass : SomeClass +>null : null +} diff --git a/tests/cases/compiler/metadataOfClassFromAlias2.ts b/tests/cases/compiler/metadataOfClassFromAlias2.ts new file mode 100644 index 00000000000..05c44d9c677 --- /dev/null +++ b/tests/cases/compiler/metadataOfClassFromAlias2.ts @@ -0,0 +1,18 @@ +// @experimentalDecorators: true +// @emitDecoratorMetadata: true +// @target: es5 +// @module: commonjs + +// @filename: auxiliry.ts +export class SomeClass { + field: string; +} + +//@filename: test.ts +import { SomeClass } from './auxiliry'; +function annotation(): PropertyDecorator { + return (target: any): void => { }; +} +export class ClassA { + @annotation() array: SomeClass | null | string; +} \ No newline at end of file From 4a3b38b2740665566be596705da873e1d257b879 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 5 Apr 2017 15:24:10 -0700 Subject: [PATCH 03/92] Refactor how we (internally) expose JS module resolution Also, provide a useful error if resolution fails. --- src/compiler/moduleNameResolver.ts | 21 +++++++++++++++++---- src/server/server.ts | 7 +++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 5280c794725..9e41d1dd667 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -2,7 +2,6 @@ /// namespace ts { - /* @internal */ export function trace(host: ModuleResolutionHost, message: DiagnosticMessage, ...args: any[]): void; export function trace(host: ModuleResolutionHost): void { @@ -15,6 +14,7 @@ namespace ts { } /** Array that is only intended to be pushed to, never read. */ + /* @internal */ export interface Push { push(value: T): void; } @@ -675,12 +675,25 @@ namespace ts { } export function nodeModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache): ResolvedModuleWithFailedLookupLocations { - return nodeModuleNameResolverWorker(moduleName, containingFile, compilerOptions, host, cache, /*jsOnly*/ false); + return nodeModuleNameResolverWorker(moduleName, getDirectoryPath(containingFile), compilerOptions, host, cache, /*jsOnly*/ false); } + /** + * Expose resolution logic to allow us to use Node module resolution logic from arbitrary locations. + * No way to do this with `require()`: https://github.com/nodejs/node/issues/5963 + * Throws an error if the module can't be resolved. + */ /* @internal */ - export function nodeModuleNameResolverWorker(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache?: ModuleResolutionCache, jsOnly = false): ResolvedModuleWithFailedLookupLocations { - const containingDirectory = getDirectoryPath(containingFile); + export function resolveJavaScriptModule(moduleName: string, initialDir: string, host: ModuleResolutionHost): string { + const { resolvedModule, failedLookupLocations } = + nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, /*cache*/ undefined, /*jsOnly*/ true); + if (!resolvedModule) { + throw new Error(`Could not resolve JS module ${moduleName} starting at ${initialDir}. Looked in: ${failedLookupLocations.join(", ")}`); + } + return resolvedModule.resolvedFileName; + } + + function nodeModuleNameResolverWorker(moduleName: string, containingDirectory: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost, cache: ModuleResolutionCache | undefined, jsOnly: boolean): ResolvedModuleWithFailedLookupLocations { const traceEnabled = isTraceEnabled(compilerOptions, host); const failedLookupLocations: string[] = []; diff --git a/src/server/server.ts b/src/server/server.ts index ab746f44f5b..d5ad3c9be05 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -702,12 +702,11 @@ namespace ts.server { } sys.require = (initialDir: string, moduleName: string): RequireResult => { - const result = nodeModuleNameResolverWorker(moduleName, initialDir + "/program.ts", { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, sys, undefined, /*jsOnly*/ true); try { - return { module: require(result.resolvedModule.resolvedFileName), error: undefined }; + return { module: require(resolveJavaScriptModule(moduleName, initialDir, sys)), error: undefined }; } - catch (e) { - return { module: undefined, error: e }; + catch (error) { + return { module: undefined, error }; } }; From 92bea77ad3c570ac8bfcb6635cee429968b5a979 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 11 Apr 2017 13:57:21 -0700 Subject: [PATCH 04/92] Tsconfig inheritance: Do not resolve included files in an inherited tsconfig --- src/compiler/commandLineParser.ts | 186 ++++++++++++++++++------------ 1 file changed, 110 insertions(+), 76 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index a9df1d0d0b8..0709ed4a4aa 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1088,53 +1088,36 @@ namespace ts { * @param host Instance of ParseConfigHost used to enumerate files in folder. * @param basePath A root directory to resolve relative path entries in the config * file to. e.g. outDir + * @param resolutionStack Only present for backwards-compatibility. Should be empty. */ - export function parseJsonConfigFileContent(json: any, host: ParseConfigHost, basePath: string, existingOptions: CompilerOptions = {}, configFileName?: string, resolutionStack: Path[] = [], extraFileExtensions: JsFileExtensionInfo[] = []): ParsedCommandLine { + export function parseJsonConfigFileContent( + json: any, + host: ParseConfigHost, + basePath: string, + existingOptions: CompilerOptions = {}, + configFileName?: string, + resolutionStack: Path[] = [], + extraFileExtensions: JsFileExtensionInfo[] = [], + ): ParsedCommandLine { const errors: Diagnostic[] = []; - basePath = normalizeSlashes(basePath); - const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames); - const resolvedPath = toPath(configFileName || "", basePath, getCanonicalFileName); - if (resolutionStack.indexOf(resolvedPath) >= 0) { - return { - options: {}, - fileNames: [], - typeAcquisition: {}, - raw: json, - errors: [createCompilerDiagnostic(Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, [...resolutionStack, resolvedPath].join(" -> "))], - wildcardDirectories: {} - }; - } - let options: CompilerOptions = convertCompilerOptionsFromJsonWorker(json["compilerOptions"], basePath, errors, configFileName); + let options = (() => { + const { include, exclude, files, options } = parseConfig(json, host, basePath, configFileName, resolutionStack, errors); + if (include) json.include = include; + if (exclude) json.exclude = exclude; + if (files) json.files = files; + return options; + })(); + + options = extend(existingOptions, options); + options.configFilePath = configFileName; + // typingOptions has been deprecated and is only supported for backward compatibility purposes. // It should be removed in future releases - use typeAcquisition instead. const jsonOptions = json["typeAcquisition"] || json["typingOptions"]; const typeAcquisition: TypeAcquisition = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName); - if (json["extends"]) { - let [include, exclude, files, baseOptions]: [string[], string[], string[], CompilerOptions] = [undefined, undefined, undefined, {}]; - if (typeof json["extends"] === "string") { - [include, exclude, files, baseOptions] = (tryExtendsName(json["extends"]) || [include, exclude, files, baseOptions]); - } - else { - errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "extends", "string")); - } - if (include && !json["include"]) { - json["include"] = include; - } - if (exclude && !json["exclude"]) { - json["exclude"] = exclude; - } - if (files && !json["files"]) { - json["files"] = files; - } - options = assign({}, baseOptions, options); - } - - options = extend(existingOptions, options); - options.configFilePath = configFileName; - - const { fileNames, wildcardDirectories } = getFileNames(errors); + const { fileNames, wildcardDirectories } = getFileNames(); const compileOnSave = convertCompileOnSaveOptionFromJson(json, basePath, errors); return { @@ -1147,40 +1130,7 @@ namespace ts { compileOnSave }; - function tryExtendsName(extendedConfig: string): [string[], string[], string[], CompilerOptions] { - // If the path isn't a rooted or relative path, don't try to resolve it (we reserve the right to special case module-id like paths in the future) - if (!(isRootedDiskPath(extendedConfig) || startsWith(normalizeSlashes(extendedConfig), "./") || startsWith(normalizeSlashes(extendedConfig), "../"))) { - errors.push(createCompilerDiagnostic(Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extendedConfig)); - return; - } - let extendedConfigPath = toPath(extendedConfig, basePath, getCanonicalFileName); - if (!host.fileExists(extendedConfigPath) && !endsWith(extendedConfigPath, ".json")) { - extendedConfigPath = `${extendedConfigPath}.json` as Path; - if (!host.fileExists(extendedConfigPath)) { - errors.push(createCompilerDiagnostic(Diagnostics.File_0_does_not_exist, extendedConfig)); - return; - } - } - const extendedResult = readConfigFile(extendedConfigPath, path => host.readFile(path)); - if (extendedResult.error) { - errors.push(extendedResult.error); - return; - } - const extendedDirname = getDirectoryPath(extendedConfigPath); - const relativeDifference = convertToRelativePath(extendedDirname, basePath, getCanonicalFileName); - const updatePath: (path: string) => string = path => isRootedDiskPath(path) ? path : combinePaths(relativeDifference, path); - // Merge configs (copy the resolution stack so it is never reused between branches in potential diamond-problem scenarios) - const result = parseJsonConfigFileContent(extendedResult.config, host, extendedDirname, /*existingOptions*/undefined, getBaseFileName(extendedConfigPath), resolutionStack.concat([resolvedPath])); - errors.push(...result.errors); - const [include, exclude, files] = map(["include", "exclude", "files"], key => { - if (!json[key] && extendedResult.config[key]) { - return map(extendedResult.config[key], updatePath); - } - }); - return [include, exclude, files, result.options]; - } - - function getFileNames(errors: Diagnostic[]): ExpandResult { + function getFileNames(): ExpandResult { let fileNames: string[]; if (hasProperty(json, "files")) { if (isArray(json["files"])) { @@ -1213,9 +1163,6 @@ namespace ts { errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array")); } } - else if (hasProperty(json, "excludes")) { - errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); - } else { // If no includes were specified, exclude common package folders and the outDir excludeSpecs = includeSpecs ? [] : ["node_modules", "bower_components", "jspm_packages"]; @@ -1245,6 +1192,93 @@ namespace ts { } } + type ParsedTsconfig = { include?: string[], exclude?: string[], files?: string[], options: CompilerOptions }; + + /** + * This *just* extracts options/include/exclude/files out of a config file. + * It does *not* resolve the included files. + */ + function parseConfig( + json: any, + host: ParseConfigHost, + basePath: string, + configFileName: string, + resolutionStack: Path[] = [], + errors: Diagnostic[], + ): ParsedTsconfig { + + basePath = normalizeSlashes(basePath); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames); + const resolvedPath = toPath(configFileName || "", basePath, getCanonicalFileName); + + if (resolutionStack.indexOf(resolvedPath) >= 0) { + errors.push(createCompilerDiagnostic(Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, [...resolutionStack, resolvedPath].join(" -> "))); + return { options: {} }; + } + + if (hasProperty(json, "excludes")) { + errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); + } + + let options: CompilerOptions = convertCompilerOptionsFromJsonWorker(json.compilerOptions, basePath, errors, configFileName); + let include: string[] | undefined = json.include, exclude: string[] | undefined = json.exclude, files: string[] | undefined = json.files; + + if (json.extends) { + // copy the resolution stack so it is never reused between branches in potential diamond-problem scenarios. + resolutionStack = resolutionStack.concat([resolvedPath]); + const base = getExtendedConfig(json.extends, host, basePath, getCanonicalFileName, resolutionStack, errors); + if (base) { + include = include || base.include; + exclude = exclude || base.exclude; + files = files || base.files; + options = assign({}, base.options, options); + } + } + + return { include, exclude, files, options }; + } + + function getExtendedConfig( + extended: any, // Usually a string. + host: ts.ParseConfigHost, + basePath: string, + getCanonicalFileName: (fileName: string) => string, + resolutionStack: Path[], + errors: Diagnostic[], + ): ParsedTsconfig | undefined { + if (typeof extended !== "string") { + errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "extends", "string")); + return undefined; + } + + // If the path isn't a rooted or relative path, don't try to resolve it (we reserve the right to special case module-id like paths in the future) + if (!(isRootedDiskPath(extended) || startsWith(normalizeSlashes(extended), "./") || startsWith(normalizeSlashes(extended), "../"))) { + errors.push(createCompilerDiagnostic(Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extended)); + return undefined; + } + + let extendedConfigPath = toPath(extended, basePath, getCanonicalFileName); + if (!host.fileExists(extendedConfigPath) && !endsWith(extendedConfigPath, ".json")) { + extendedConfigPath = extendedConfigPath + ".json" as Path; + if (!host.fileExists(extendedConfigPath)) { + errors.push(createCompilerDiagnostic(Diagnostics.File_0_does_not_exist, extended)); + return undefined; + } + } + + const extendedResult = readConfigFile(extendedConfigPath, path => host.readFile(path)); + if (extendedResult.error) { + errors.push(extendedResult.error); + return undefined; + } + + const extendedDirname = getDirectoryPath(extendedConfigPath); + const relativeDifference = convertToRelativePath(extendedDirname, basePath, getCanonicalFileName); + const updatePath: (path: string) => string = path => isRootedDiskPath(path) ? path : combinePaths(relativeDifference, path); + const { include, exclude, files, options } = parseConfig(extendedResult.config, host, extendedDirname, getBaseFileName(extendedConfigPath), resolutionStack, errors); + return { include: map(include, updatePath), exclude: map(exclude, updatePath), files: map(files, updatePath), options }; + } + export function convertCompileOnSaveOptionFromJson(jsonOption: any, basePath: string, errors: Diagnostic[]): boolean { if (!hasProperty(jsonOption, compileOnSaveCommandLineOption.name)) { return false; From 8c559a4f083af397af98f18efc9980d295ffd4ca Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 12 Apr 2017 15:11:16 -0700 Subject: [PATCH 05/92] Respond to PR comments --- src/compiler/commandLineParser.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 0709ed4a4aa..587529a5beb 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1103,9 +1103,9 @@ namespace ts { let options = (() => { const { include, exclude, files, options } = parseConfig(json, host, basePath, configFileName, resolutionStack, errors); - if (include) json.include = include; - if (exclude) json.exclude = exclude; - if (files) json.files = files; + if (include) { json.include = include; } + if (exclude) { json.exclude = exclude; } + if (files) { json.files = files; } return options; })(); @@ -1203,7 +1203,7 @@ namespace ts { host: ParseConfigHost, basePath: string, configFileName: string, - resolutionStack: Path[] = [], + resolutionStack: Path[], errors: Diagnostic[], ): ParsedTsconfig { @@ -1251,8 +1251,10 @@ namespace ts { return undefined; } + extended = normalizeSlashes(extended); + // If the path isn't a rooted or relative path, don't try to resolve it (we reserve the right to special case module-id like paths in the future) - if (!(isRootedDiskPath(extended) || startsWith(normalizeSlashes(extended), "./") || startsWith(normalizeSlashes(extended), "../"))) { + if (!(isRootedDiskPath(extended) || startsWith(extended, "./") || startsWith(extended, "../"))) { errors.push(createCompilerDiagnostic(Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extended)); return undefined; } From 0eaa8eb3ab9ad1db8cf95c51d8e02c9d65ee40cf Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 14 Apr 2017 11:08:05 -0700 Subject: [PATCH 06/92] Updating PR as per feedback. OneType|null is again treated as object instead of simplifying it --- src/compiler/checker.ts | 40 +++++++++---------- src/compiler/transformers/ts.ts | 12 ++---- src/compiler/utilities.ts | 4 -- .../reference/metadataOfClassFromAlias.js | 6 +-- .../metadataOfClassFromAlias.symbols | 3 +- .../reference/metadataOfClassFromAlias.types | 1 - .../reference/metadataOfClassFromAlias2.js | 3 +- .../metadataOfClassFromAlias2.symbols | 3 +- .../reference/metadataOfClassFromAlias2.types | 1 - .../reference/metadataOfUnionWithNull.js | 16 ++++---- 10 files changed, 36 insertions(+), 53 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f118fdbba1e..c0d3cd17fdb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18625,33 +18625,36 @@ namespace ts { } } + /** + * This function marks the type used for metadata decorator as referenced if it is import + * from external module. + * This is different from markTypeNodeAsReferenced because it tries to simplify type nodes in + * union and intersection type + * @param node + */ function markDecoratorMedataDataTypeNodeAsReferenced(node: TypeNode): void { - const entityNameOrToken = getEntityNameForDecoratoryMetadata(node); - if (entityNameOrToken && isEntityName(entityNameOrToken)) { - markEntityNameOrEntityExpressionAsReference(entityNameOrToken); + const entityName = getEntityNameForDecoratorMetadata(node); + if (entityName && isEntityName(entityName)) { + markEntityNameOrEntityExpressionAsReference(entityName); } } - type voidUndefinedNullOrNeverTypeNode = Token; - - function getEntityNameForDecoratoryMetadata(node: TypeNode): EntityName | voidUndefinedNullOrNeverTypeNode { + function getEntityNameForDecoratorMetadata(node: TypeNode): EntityName { if (node) { switch (node.kind) { case SyntaxKind.IntersectionType: case SyntaxKind.UnionType: - let commonEntityName: EntityName | voidUndefinedNullOrNeverTypeNode; + let commonEntityName: EntityName; for (const typeNode of (node).types) { - const individualEntityName = getEntityNameForDecoratoryMetadata(typeNode); + const individualEntityName = getEntityNameForDecoratorMetadata(typeNode); if (!individualEntityName) { - // Individual is something like string number - // So it would be serialized to either that type or object + // Individual is something like string number + // So it would be serialized to either that type or object // Safe to return here return undefined; } - const isCommonEntityName = commonEntityName && isEntityName(commonEntityName); - const isIndividualEntityName = isEntityName(individualEntityName); - if (isCommonEntityName && isIndividualEntityName) { + if (commonEntityName) { // Note this is in sync with the transformation that happens for type node. // Keep this in sync with serializeUnionOrIntersectionType // Verify if they refer to same entity and is identifier @@ -18662,24 +18665,17 @@ namespace ts { return undefined; } } - else if (!isCommonEntityName) { + else { commonEntityName = individualEntityName; } } return commonEntityName; case SyntaxKind.ParenthesizedType: - return getEntityNameForDecoratoryMetadata((node).type); + return getEntityNameForDecoratorMetadata((node).type); case SyntaxKind.TypeReference: return (node).typeName; - - case SyntaxKind.VoidKeyword: - case SyntaxKind.UndefinedKeyword: - case SyntaxKind.NullKeyword: - case SyntaxKind.NeverKeyword: - return node; - } } } diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index 06bd3fef032..68bba667058 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -1761,25 +1761,19 @@ namespace ts { } function serializeUnionOrIntersectionType(node: UnionOrIntersectionTypeNode): SerializedTypeNode { - // Note when updating logic here also update getEntityNameForDecoratoryMetadata + // Note when updating logic here also update getEntityNameForDecoratorMetadata // so that aliases can be marked as referenced let serializedUnion: SerializedTypeNode; for (const typeNode of node.types) { const serializedIndividual = serializeTypeNode(typeNode); - if (isVoidExpression(serializedIndividual)) { - // If we dont have any other type already set, set the initial type - if (!serializedUnion) { - serializedUnion = serializedIndividual; - } - } - else if (isIdentifier(serializedIndividual) && serializedIndividual.text === "Object") { + if (isIdentifier(serializedIndividual) && serializedIndividual.text === "Object") { // One of the individual is global object, return immediately return serializedIndividual; } // If there exists union that is not void 0 expression, check if the the common type is identifier. // anything more complex and we will just default to Object - else if (serializedUnion && !isVoidExpression(serializedUnion)) { + else if (serializedUnion) { // Different types if (!isIdentifier(serializedUnion) || !isIdentifier(serializedIndividual) || diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 3b4b87c956f..c6328324bbb 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3566,10 +3566,6 @@ namespace ts { return node.kind === SyntaxKind.Identifier; } - export function isVoidExpression(node: Node): node is VoidExpression { - return node.kind === SyntaxKind.VoidExpression; - } - export function isGeneratedIdentifier(node: Node): node is GeneratedIdentifier { // Using `>` here catches both `GeneratedIdentifierKind.None` and `undefined`. return isIdentifier(node) && node.autoGenerateKind > GeneratedIdentifierKind.None; diff --git a/tests/baselines/reference/metadataOfClassFromAlias.js b/tests/baselines/reference/metadataOfClassFromAlias.js index bf3d8bf860f..c99f7cc2e23 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias.js +++ b/tests/baselines/reference/metadataOfClassFromAlias.js @@ -1,7 +1,6 @@ //// [tests/cases/compiler/metadataOfClassFromAlias.ts] //// //// [auxiliry.ts] - export class SomeClass { field: string; } @@ -17,6 +16,7 @@ export class ClassA { //// [auxiliry.js] "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); var SomeClass = (function () { function SomeClass() { } @@ -34,7 +34,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; -var auxiliry_1 = require("./auxiliry"); +Object.defineProperty(exports, "__esModule", { value: true }); function annotation() { return function (target) { }; } @@ -45,6 +45,6 @@ var ClassA = (function () { }()); __decorate([ annotation(), - __metadata("design:type", auxiliry_1.SomeClass) + __metadata("design:type", Object) ], ClassA.prototype, "array", void 0); exports.ClassA = ClassA; diff --git a/tests/baselines/reference/metadataOfClassFromAlias.symbols b/tests/baselines/reference/metadataOfClassFromAlias.symbols index 2cf6ca18393..b4d20403275 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias.symbols +++ b/tests/baselines/reference/metadataOfClassFromAlias.symbols @@ -1,10 +1,9 @@ === tests/cases/compiler/auxiliry.ts === - export class SomeClass { >SomeClass : Symbol(SomeClass, Decl(auxiliry.ts, 0, 0)) field: string; ->field : Symbol(SomeClass.field, Decl(auxiliry.ts, 1, 24)) +>field : Symbol(SomeClass.field, Decl(auxiliry.ts, 0, 24)) } === tests/cases/compiler/test.ts === diff --git a/tests/baselines/reference/metadataOfClassFromAlias.types b/tests/baselines/reference/metadataOfClassFromAlias.types index 1381ab7afac..a14f72ee619 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias.types +++ b/tests/baselines/reference/metadataOfClassFromAlias.types @@ -1,5 +1,4 @@ === tests/cases/compiler/auxiliry.ts === - export class SomeClass { >SomeClass : SomeClass diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.js b/tests/baselines/reference/metadataOfClassFromAlias2.js index 70488af2b7e..bcdbb34ac50 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias2.js +++ b/tests/baselines/reference/metadataOfClassFromAlias2.js @@ -1,7 +1,6 @@ //// [tests/cases/compiler/metadataOfClassFromAlias2.ts] //// //// [auxiliry.ts] - export class SomeClass { field: string; } @@ -17,6 +16,7 @@ export class ClassA { //// [auxiliry.js] "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); var SomeClass = (function () { function SomeClass() { } @@ -34,6 +34,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +Object.defineProperty(exports, "__esModule", { value: true }); function annotation() { return function (target) { }; } diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.symbols b/tests/baselines/reference/metadataOfClassFromAlias2.symbols index ab183452f20..a20296c76af 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias2.symbols +++ b/tests/baselines/reference/metadataOfClassFromAlias2.symbols @@ -1,10 +1,9 @@ === tests/cases/compiler/auxiliry.ts === - export class SomeClass { >SomeClass : Symbol(SomeClass, Decl(auxiliry.ts, 0, 0)) field: string; ->field : Symbol(SomeClass.field, Decl(auxiliry.ts, 1, 24)) +>field : Symbol(SomeClass.field, Decl(auxiliry.ts, 0, 24)) } === tests/cases/compiler/test.ts === diff --git a/tests/baselines/reference/metadataOfClassFromAlias2.types b/tests/baselines/reference/metadataOfClassFromAlias2.types index 75807845d1a..20979a5c77d 100644 --- a/tests/baselines/reference/metadataOfClassFromAlias2.types +++ b/tests/baselines/reference/metadataOfClassFromAlias2.types @@ -1,5 +1,4 @@ === tests/cases/compiler/auxiliry.ts === - export class SomeClass { >SomeClass : SomeClass diff --git a/tests/baselines/reference/metadataOfUnionWithNull.js b/tests/baselines/reference/metadataOfUnionWithNull.js index cc594ae326d..0c834be9687 100644 --- a/tests/baselines/reference/metadataOfUnionWithNull.js +++ b/tests/baselines/reference/metadataOfUnionWithNull.js @@ -65,15 +65,15 @@ var B = (function () { }()); __decorate([ PropDeco, - __metadata("design:type", String) + __metadata("design:type", Object) ], B.prototype, "x"); __decorate([ PropDeco, - __metadata("design:type", Boolean) + __metadata("design:type", Object) ], B.prototype, "y"); __decorate([ PropDeco, - __metadata("design:type", String) + __metadata("design:type", Object) ], B.prototype, "z"); __decorate([ PropDeco, @@ -89,11 +89,11 @@ __decorate([ ], B.prototype, "c"); __decorate([ PropDeco, - __metadata("design:type", void 0) + __metadata("design:type", Object) ], B.prototype, "d"); __decorate([ PropDeco, - __metadata("design:type", typeof Symbol === "function" ? Symbol : Object) + __metadata("design:type", Object) ], B.prototype, "e"); __decorate([ PropDeco, @@ -101,13 +101,13 @@ __decorate([ ], B.prototype, "f"); __decorate([ PropDeco, - __metadata("design:type", A) + __metadata("design:type", Object) ], B.prototype, "g"); __decorate([ PropDeco, - __metadata("design:type", B) + __metadata("design:type", Object) ], B.prototype, "h"); __decorate([ PropDeco, - __metadata("design:type", typeof Symbol === "function" ? Symbol : Object) + __metadata("design:type", Object) ], B.prototype, "j"); From c1d851c7ec4b0ce09e06f7982642f115a89631c2 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Tue, 2 May 2017 02:06:23 +0900 Subject: [PATCH 07/92] allow use of arguments on ambient context --- src/compiler/binder.ts | 39 +++++++++---- ...lisionArgumentsClassConstructor.errors.txt | 29 +--------- .../collisionArgumentsClassMethod.errors.txt | 29 +--------- .../collisionArgumentsFunction.errors.txt | 15 +++-- .../reference/collisionArgumentsFunction.js | 19 +++++-- .../reference/collisionArgumentsInType.js | 2 + .../collisionArgumentsInType.symbols | 57 ++++++++++--------- .../reference/collisionArgumentsInType.types | 3 + .../collisionArgumentsInterfaceMembers.js | 2 + ...collisionArgumentsInterfaceMembers.symbols | 51 +++++++++-------- .../collisionArgumentsInterfaceMembers.types | 3 + .../compiler/collisionArgumentsFunction.ts | 15 +++-- .../compiler/collisionArgumentsInType.ts | 1 + .../collisionArgumentsInterfaceMembers.ts | 1 + 14 files changed, 129 insertions(+), 137 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 27b3067278c..759e56d449c 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -221,7 +221,7 @@ namespace ts { // other kinds of value declarations take precedence over modules symbol.valueDeclaration = node; } - } + } } // Should not be called on a declaration with a computed property name, @@ -389,9 +389,9 @@ namespace ts { // 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default // 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers) if (symbol.declarations && symbol.declarations.length && - (isDefaultExport || (node.kind === SyntaxKind.ExportAssignment && !(node).isExportEquals))) { - message = Diagnostics.A_module_cannot_have_multiple_default_exports; - } + (isDefaultExport || (node.kind === SyntaxKind.ExportAssignment && !(node).isExportEquals))) { + message = Diagnostics.A_module_cannot_have_multiple_default_exports; + } } } @@ -1414,7 +1414,7 @@ namespace ts { if (isObjectLiteralOrClassExpressionMethod(node)) { return ContainerFlags.IsContainer | ContainerFlags.IsControlFlowContainer | ContainerFlags.HasLocals | ContainerFlags.IsFunctionLike | ContainerFlags.IsObjectLiteralOrClassExpressionMethod; } - // falls through + // falls through case SyntaxKind.Constructor: case SyntaxKind.FunctionDeclaration: case SyntaxKind.MethodSignature: @@ -1716,7 +1716,7 @@ namespace ts { declareModuleMember(node, symbolFlags, symbolExcludes); break; } - // falls through + // falls through default: if (!blockScopeContainer.locals) { blockScopeContainer.locals = createMap(); @@ -2010,7 +2010,7 @@ namespace ts { bindBlockScopedDeclaration(parentNode, SymbolFlags.TypeAlias, SymbolFlags.TypeAliasExcludes); break; } - // falls through + // falls through case SyntaxKind.ThisKeyword: if (currentFlow && (isExpression(node) || parent.kind === SyntaxKind.ShorthandPropertyAssignment)) { node.flowNode = currentFlow; @@ -2186,7 +2186,7 @@ namespace ts { if (!isFunctionLike(node.parent)) { return; } - // falls through + // falls through case SyntaxKind.ModuleBlock: return updateStrictModeStatementList((node).statements); } @@ -2211,7 +2211,7 @@ namespace ts { } function bindSourceFileAsExternalModule() { - bindAnonymousDeclaration(file, SymbolFlags.ValueModule, `"${removeFileExtension(file.fileName) }"`); + bindAnonymousDeclaration(file, SymbolFlags.ValueModule, `"${removeFileExtension(file.fileName)}"`); } function bindExportAssignment(node: ExportAssignment | BinaryExpression) { @@ -2503,8 +2503,27 @@ namespace ts { } } + function needParameterStrictModeCheck(node: Node) { + if (node.parent.kind === SyntaxKind.ConstructorType || node.parent.kind === SyntaxKind.FunctionType) { + return false; + } + + if (node.parent.parent && ( + node.parent.parent.kind === SyntaxKind.InterfaceDeclaration || + node.parent.parent.kind === SyntaxKind.TypeLiteral + )) { + return false; + } + + if (isDeclarationFile(file) || isInAmbientContext(node)) { + return false; + } + + return true; + } + function bindParameter(node: ParameterDeclaration) { - if (inStrictMode) { + if (inStrictMode && needParameterStrictModeCheck(node)) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) checkStrictModeEvalOrArguments(node, node.name); diff --git a/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt b/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt index 03bf4f9e38b..a7066fb1fbe 100644 --- a/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt +++ b/tests/baselines/reference/collisionArgumentsClassConstructor.errors.txt @@ -13,9 +13,6 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(30,24): error TS1210: tests/cases/compiler/collisionArgumentsClassConstructor.ts(31,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(35,24): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(36,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(41,31): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(44,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(47,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(51,31): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(52,31): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(53,25): error TS2396: Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters. @@ -30,15 +27,9 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(67,17): error TS1210: tests/cases/compiler/collisionArgumentsClassConstructor.ts(68,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(69,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassConstructor.ts(70,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(75,31): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(76,31): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(79,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(80,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(84,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -==== tests/cases/compiler/collisionArgumentsClassConstructor.ts (38 errors) ==== +==== tests/cases/compiler/collisionArgumentsClassConstructor.ts (29 errors) ==== // Constructors class c1 { constructor(i: number, ...arguments) { // error @@ -110,18 +101,12 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1210: declare class c4 { constructor(i: number, ...arguments); // No error - no code gen - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } declare class c42 { constructor(arguments: number, ...rest); // No error - no code gen - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } declare class c4NoError { constructor(arguments: number); // no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } class c5 { @@ -178,26 +163,14 @@ tests/cases/compiler/collisionArgumentsClassConstructor.ts(85,17): error TS1210: declare class c6 { constructor(i: number, ...arguments); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. constructor(i: string, ...arguments); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } declare class c62 { constructor(arguments: number, ...rest); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. constructor(arguments: string, ...rest); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } declare class c6NoError { constructor(arguments: number); // no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. constructor(arguments: string); // no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } \ No newline at end of file diff --git a/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt b/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt index ea699414f17..ec0562f57ca 100644 --- a/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt +++ b/tests/baselines/reference/collisionArgumentsClassMethod.errors.txt @@ -20,20 +20,11 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(21,22): error TS1210: Inva tests/cases/compiler/collisionArgumentsClassMethod.ts(22,22): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassMethod.ts(23,22): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassMethod.ts(24,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(29,30): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(30,17): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(31,23): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(33,29): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(34,29): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(35,16): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(36,16): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(37,22): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -tests/cases/compiler/collisionArgumentsClassMethod.ts(38,22): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassMethod.ts(43,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. -==== tests/cases/compiler/collisionArgumentsClassMethod.ts (33 errors) ==== +==== tests/cases/compiler/collisionArgumentsClassMethod.ts (24 errors) ==== class c1 { public foo(i: number, ...arguments) { //arguments is error ~~~~~~~~~~~~ @@ -107,33 +98,15 @@ tests/cases/compiler/collisionArgumentsClassMethod.ts(46,13): error TS1210: Inva declare class c2 { public foo(i: number, ...arguments); // No error - no code gen - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public foo1(arguments: number, ...rest); // No error - no code gen - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public fooNoError(arguments: number); // No error - no code gen - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f4(i: number, ...arguments); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f4(i: string, ...arguments); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f41(arguments: number, ...rest); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f41(arguments: string, ...rest); // no codegen no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f4NoError(arguments: number); // no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. public f4NoError(arguments: string); // no error - ~~~~~~~~~ -!!! error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. } class c3 { diff --git a/tests/baselines/reference/collisionArgumentsFunction.errors.txt b/tests/baselines/reference/collisionArgumentsFunction.errors.txt index a557e9cbcba..f5388af6a14 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.errors.txt +++ b/tests/baselines/reference/collisionArgumentsFunction.errors.txt @@ -51,9 +51,12 @@ tests/cases/compiler/collisionArgumentsFunction.ts(30,22): error TS2396: Duplica var arguments: any; // No error } - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error \ No newline at end of file + namespace strict { + "use strict"; + declare function f5(arguments: number, ...rest); // no codegen no error + declare function f5(arguments: string, ...rest); // no codegen no error + declare function f52(i: number, ...arguments); // no codegen no error + declare function f52(i: string, ...arguments); // no codegen no error + declare function f6(arguments: number); // no codegen no error + declare function f6(arguments: string); // no codegen no error + } \ No newline at end of file diff --git a/tests/baselines/reference/collisionArgumentsFunction.js b/tests/baselines/reference/collisionArgumentsFunction.js index c6a26baa495..64cd2682a4a 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.js +++ b/tests/baselines/reference/collisionArgumentsFunction.js @@ -37,12 +37,15 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -declare function f5(arguments: number, ...rest); // no codegen no error -declare function f5(arguments: string, ...rest); // no codegen no error -declare function f52(i: number, ...arguments); // no codegen no error -declare function f52(i: string, ...arguments); // no codegen no error -declare function f6(arguments: number); // no codegen no error -declare function f6(arguments: string); // no codegen no error +namespace strict { + "use strict"; + declare function f5(arguments: number, ...rest); // no codegen no error + declare function f5(arguments: string, ...rest); // no codegen no error + declare function f52(i: number, ...arguments); // no codegen no error + declare function f52(i: string, ...arguments); // no codegen no error + declare function f6(arguments: number); // no codegen no error + declare function f6(arguments: string); // no codegen no error +} //// [collisionArgumentsFunction.js] // Functions @@ -90,3 +93,7 @@ function f42(i) { function f4NoError(arguments) { var arguments; // No error } +var strict; +(function (strict) { + "use strict"; +})(strict || (strict = {})); diff --git a/tests/baselines/reference/collisionArgumentsInType.js b/tests/baselines/reference/collisionArgumentsInType.js index 4db7c930775..e9ff629f76e 100644 --- a/tests/baselines/reference/collisionArgumentsInType.js +++ b/tests/baselines/reference/collisionArgumentsInType.js @@ -1,4 +1,5 @@ //// [collisionArgumentsInType.ts] +"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { @@ -15,6 +16,7 @@ var v21: { } //// [collisionArgumentsInType.js] +"use strict"; var v1; // no error - no code gen var v12; // no error - no code gen var v2; diff --git a/tests/baselines/reference/collisionArgumentsInType.symbols b/tests/baselines/reference/collisionArgumentsInType.symbols index 94c9374c7cd..d2ec9ce6705 100644 --- a/tests/baselines/reference/collisionArgumentsInType.symbols +++ b/tests/baselines/reference/collisionArgumentsInType.symbols @@ -1,53 +1,54 @@ === tests/cases/compiler/collisionArgumentsInType.ts === +"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen ->v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 0, 3)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 0, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 0, 19)) +>v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 1, 3)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 1, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 19)) var v12: (arguments: number, ...restParameters) => void; // no error - no code gen ->v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 1, 3)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 10)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 1, 28)) +>v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 2, 3)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 2, 10)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 2, 28)) var v2: { ->v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 2, 3)) +>v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 3, 3)) (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 3, 5)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 3, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 5)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 23)) new (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 9)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 9)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 27)) foo(arguments: number, ...restParameters); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 4, 47)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 8)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 26)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 5, 47)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 8)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 26)) prop: (arguments: number, ...restParameters) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 5, 46)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 11)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 29)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 6, 46)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 7, 11)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 7, 29)) } var v21: { ->v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 8, 3)) +>v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 9, 3)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 9, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 9, 15)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 15)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 19)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 19)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 10, 34)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 18)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 11, 34)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 18)) prop: (i: number, ...arguments) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 11, 33)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 11)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 21)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 12, 33)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 13, 11)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 13, 21)) } diff --git a/tests/baselines/reference/collisionArgumentsInType.types b/tests/baselines/reference/collisionArgumentsInType.types index a8096e2e7f5..7b4c8983b4c 100644 --- a/tests/baselines/reference/collisionArgumentsInType.types +++ b/tests/baselines/reference/collisionArgumentsInType.types @@ -1,4 +1,7 @@ === tests/cases/compiler/collisionArgumentsInType.ts === +"use strict"; +>"use strict" : "use strict" + var v1: (i: number, ...arguments) => void; // no error - no code gen >v1 : (i: number, ...arguments: any[]) => void >i : number diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js index a55e112b603..34530ca2c72 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js @@ -1,4 +1,5 @@ //// [collisionArgumentsInterfaceMembers.ts] +"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen @@ -29,3 +30,4 @@ interface i3 { } //// [collisionArgumentsInterfaceMembers.js] +"use strict"; diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols index f0a82bec521..a7e14b5959e 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols @@ -1,63 +1,64 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === +"use strict"; // call interface i1 { ->i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 0)) +>i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 13)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 2, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 2, 15)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 3, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 3, 15)) } interface i12 { ->i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 3, 1)) +>i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 4, 1)) (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 5, 5)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 5, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 6, 5)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 6, 23)) } interface i1NoError { ->i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 6, 1)) +>i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 7, 1)) (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 8, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 9, 5)) } // new interface i2 { ->i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 9, 1)) +>i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 10, 1)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 13, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 13, 19)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 14, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 14, 19)) } interface i21 { ->i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 14, 1)) +>i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 15, 1)) new (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 16, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 16, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 17, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 17, 27)) } interface i2NoError { ->i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 17, 1)) +>i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 18, 1)) new (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 19, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 20, 9)) } // method interface i3 { ->i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 20, 1)) +>i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 21, 1)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 23, 14)) ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 24, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 24, 18)) +>foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 24, 14)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 25, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 18)) foo1(arguments: number, ...rest); // no error - no code gen ->foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 24, 33)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 25, 27)) +>foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 25, 33)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 26, 27)) fooNoError(arguments: number); // no error ->fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 25, 37)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 15)) +>fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 26, 37)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 27, 15)) } diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types index 6edb0a7ebed..3563a25b0bd 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types @@ -1,4 +1,7 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === +"use strict"; +>"use strict" : "use strict" + // call interface i1 { >i1 : i1 diff --git a/tests/cases/compiler/collisionArgumentsFunction.ts b/tests/cases/compiler/collisionArgumentsFunction.ts index b90dee9ec11..d5136d9169a 100644 --- a/tests/cases/compiler/collisionArgumentsFunction.ts +++ b/tests/cases/compiler/collisionArgumentsFunction.ts @@ -36,9 +36,12 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -declare function f5(arguments: number, ...rest); // no codegen no error -declare function f5(arguments: string, ...rest); // no codegen no error -declare function f52(i: number, ...arguments); // no codegen no error -declare function f52(i: string, ...arguments); // no codegen no error -declare function f6(arguments: number); // no codegen no error -declare function f6(arguments: string); // no codegen no error \ No newline at end of file +namespace strict { + "use strict"; + declare function f5(arguments: number, ...rest); // no codegen no error + declare function f5(arguments: string, ...rest); // no codegen no error + declare function f52(i: number, ...arguments); // no codegen no error + declare function f52(i: string, ...arguments); // no codegen no error + declare function f6(arguments: number); // no codegen no error + declare function f6(arguments: string); // no codegen no error +} \ No newline at end of file diff --git a/tests/cases/compiler/collisionArgumentsInType.ts b/tests/cases/compiler/collisionArgumentsInType.ts index c9354ba0bae..13785ef669d 100644 --- a/tests/cases/compiler/collisionArgumentsInType.ts +++ b/tests/cases/compiler/collisionArgumentsInType.ts @@ -1,3 +1,4 @@ +"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { diff --git a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts index bfb280116e4..87b6b4503ac 100644 --- a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts +++ b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts @@ -1,3 +1,4 @@ +"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen From 2345ecdcb84ff91dc5a9b2221a9fccd1d43c670a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 1 May 2017 11:35:56 -0700 Subject: [PATCH 08/92] Suggest spelling for unknown symbols + properties --- src/compiler/checker.ts | 199 ++++++++++++++++++++------- src/compiler/diagnosticMessages.json | 13 +- src/compiler/types.ts | 2 + src/compiler/utilities.ts | 23 ++++ 4 files changed, 187 insertions(+), 50 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18e57303c12..7b7aaf9937c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -204,7 +204,9 @@ namespace ts { // since we are only interested in declarations of the module itself return tryFindAmbientModule(moduleName, /*withAugmentations*/ false); }, - getApparentType + getApparentType, + getSuggestionForNonexistentProperty, + getSuggestionForNonexistentSymbol, }; const tupleTypes: GenericType[] = []; @@ -840,7 +842,25 @@ namespace ts { // Resolve a given name for a given meaning at a given location. An error is reported if the name was not found and // the nameNotFoundMessage argument is not undefined. Returns the resolved symbol, or undefined if no symbol with // the given name can be found. - function resolveName(location: Node | undefined, name: string, meaning: SymbolFlags, nameNotFoundMessage: DiagnosticMessage, nameArg: string | Identifier): Symbol { + function resolveName( + location: Node | undefined, + name: string, + meaning: SymbolFlags, + nameNotFoundMessage: DiagnosticMessage, + nameArg: string | Identifier, + suggestedNameNotFoundMessage?: DiagnosticMessage): Symbol { + return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, getSymbol, suggestedNameNotFoundMessage); + } + + function resolveNameHelper( + location: Node | undefined, + name: string, + meaning: SymbolFlags, + nameNotFoundMessage: DiagnosticMessage, + nameArg: string | Identifier, + lookup: (symbols: SymbolTable, name: string, meaning: SymbolFlags) => Symbol, + suggestedNameNotFoundMessage?: DiagnosticMessage): Symbol { + const originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location let result: Symbol; let lastLocation: Node; let propertyWithInvalidInitializer: Node; @@ -851,7 +871,7 @@ namespace ts { loop: while (location) { // Locals of a source file are not in scope (because they get merged into the global symbol table) if (location.locals && !isGlobalSourceFile(location)) { - if (result = getSymbol(location.locals, name, meaning)) { + if (result = lookup(location.locals, name, meaning)) { let useResult = true; if (isFunctionLike(location) && lastLocation && lastLocation !== (location).body) { // symbol lookup restrictions for function-like declarations @@ -929,12 +949,12 @@ namespace ts { } } - if (result = getSymbol(moduleExports, name, meaning & SymbolFlags.ModuleMember)) { + if (result = lookup(moduleExports, name, meaning & SymbolFlags.ModuleMember)) { break loop; } break; case SyntaxKind.EnumDeclaration: - if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & SymbolFlags.EnumMember)) { + if (result = lookup(getSymbolOfNode(location).exports, name, meaning & SymbolFlags.EnumMember)) { break loop; } break; @@ -949,7 +969,7 @@ namespace ts { if (isClassLike(location.parent) && !(getModifierFlags(location) & ModifierFlags.Static)) { const ctor = findConstructorDeclaration(location.parent); if (ctor && ctor.locals) { - if (getSymbol(ctor.locals, name, meaning & SymbolFlags.Value)) { + if (lookup(ctor.locals, name, meaning & SymbolFlags.Value)) { // Remember the property node, it will be used later to report appropriate error propertyWithInvalidInitializer = location; } @@ -959,7 +979,7 @@ namespace ts { case SyntaxKind.ClassDeclaration: case SyntaxKind.ClassExpression: case SyntaxKind.InterfaceDeclaration: - if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & SymbolFlags.Type)) { + if (result = lookup(getSymbolOfNode(location).members, name, meaning & SymbolFlags.Type)) { if (!isTypeParameterSymbolDeclaredInContainer(result, location)) { // ignore type parameters not declared in this container result = undefined; @@ -995,7 +1015,7 @@ namespace ts { grandparent = location.parent.parent; if (isClassLike(grandparent) || grandparent.kind === SyntaxKind.InterfaceDeclaration) { // A reference to this grandparent's type parameters would be an error - if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & SymbolFlags.Type)) { + if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & SymbolFlags.Type)) { error(errorLocation, Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); return undefined; } @@ -1059,7 +1079,7 @@ namespace ts { } if (!result) { - result = getSymbol(globals, name, meaning); + result = lookup(globals, name, meaning); } if (!result) { @@ -1070,7 +1090,16 @@ namespace ts { !checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) && !checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) && !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning)) { - error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : declarationNameToString(nameArg)); + let suggestion: string | undefined; + if (suggestedNameNotFoundMessage) { + suggestion = getSuggestionForNonexistentSymbol(originalLocation, name, meaning); + if (suggestion) { + error(errorLocation, suggestedNameNotFoundMessage, typeof nameArg === "string" ? nameArg : declarationNameToString(nameArg), suggestion); + } + } + if (!suggestion) { + error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : declarationNameToString(nameArg)); + } } } return undefined; @@ -10411,7 +10440,7 @@ namespace ts { function getResolvedSymbol(node: Identifier): Symbol { const links = getNodeLinks(node); if (!links.resolvedSymbol) { - links.resolvedSymbol = !nodeIsMissing(node) && resolveName(node, node.text, SymbolFlags.Value | SymbolFlags.ExportValue, Diagnostics.Cannot_find_name_0, node) || unknownSymbol; + links.resolvedSymbol = !nodeIsMissing(node) && resolveName(node, node.text, SymbolFlags.Value | SymbolFlags.ExportValue, Diagnostics.Cannot_find_name_0, node, Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol; } return links.resolvedSymbol; } @@ -14051,44 +14080,6 @@ namespace ts { return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right); } - function reportNonexistentProperty(propNode: Identifier, containingType: Type) { - let errorInfo: DiagnosticMessageChain; - if (containingType.flags & TypeFlags.Union && !(containingType.flags & TypeFlags.Primitive)) { - for (const subtype of (containingType as UnionType).types) { - if (!getPropertyOfType(subtype, propNode.text)) { - errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(subtype)); - break; - } - } - } - errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(containingType)); - diagnostics.add(createDiagnosticForNodeFromMessageChain(propNode, errorInfo)); - } - - function markPropertyAsReferenced(prop: Symbol) { - if (prop && - noUnusedIdentifiers && - (prop.flags & SymbolFlags.ClassMember) && - prop.valueDeclaration && (getModifierFlags(prop.valueDeclaration) & ModifierFlags.Private)) { - if (getCheckFlags(prop) & CheckFlags.Instantiated) { - getSymbolLinks(prop).target.isReferenced = true; - } - else { - prop.isReferenced = true; - } - } - } - - function isInPropertyInitializer(node: Node): boolean { - while (node) { - if (node.parent && node.parent.kind === SyntaxKind.PropertyDeclaration && (node.parent as PropertyDeclaration).initializer === node) { - return true; - } - node = node.parent; - } - return false; - } - function checkPropertyAccessExpressionOrQualifiedName(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, right: Identifier) { const type = checkNonNullExpression(left); if (isTypeAny(type) || type === silentNeverType) { @@ -14152,6 +14143,116 @@ namespace ts { return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; } + function reportNonexistentProperty(propNode: Identifier, containingType: Type) { + let errorInfo: DiagnosticMessageChain; + if (containingType.flags & TypeFlags.Union && !(containingType.flags & TypeFlags.Primitive)) { + for (const subtype of (containingType as UnionType).types) { + if (!getPropertyOfType(subtype, propNode.text)) { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(subtype)); + break; + } + } + } + const suggestion = getSuggestionForNonexistentProperty(propNode, containingType); + if (suggestion) { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, declarationNameToString(propNode), typeToString(containingType), suggestion); + } + else { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(containingType)); + } + diagnostics.add(createDiagnosticForNodeFromMessageChain(propNode, errorInfo)); + } + + function getSuggestionForNonexistentProperty(node: Identifier, containingType: Type): string | undefined { + const suggestion = getSpellingSuggestionForName(node.text, getPropertiesOfObjectType(containingType), SymbolFlags.Value); + return suggestion && suggestion.name; + } + + function getSuggestionForNonexistentSymbol(location: Node, name: string, meaning: SymbolFlags): string { + const result = resolveNameHelper(location, name, meaning, /*nameNotFoundMessage*/ undefined, name, (symbols, name, meaning) => { + const symbol = getSymbol(symbols, name, meaning); + if (symbol) { + // Sometimes the symbol is found when location is a return type of a function: `typeof x` and `x` is declared in the body of the function + // So the table *contains* `x` but `x` isn't actually in scope. + // However, resolveNameHelper will continue and call this callback again, so we'll eventually get a correct suggestion. + return symbol; + } + return getSpellingSuggestionForName(name, arrayFrom(symbols.values()), meaning); + }); + if (result) { + return result.name; + } + } + + /** + * Given a name and a list of symbols whose names are *not* equal to the name, return a spelling suggestion if there is one that is close enough. + * Names less than length 3 only check for case-insensitive equality, not levenshtein distance. + * + * If there is a candidate that's the same except for case, return that. + * If there is a candidate that's within one edit of the name, return that. + * Otherwise, return the candidate with the smallest Levenshtein distance, + * except for candidates: + * * With no name + * * Whose meaning doesn't match the `meaning` parameter. + * * Whose length differs from the target name by more than 3. + * * Whose levenshtein distance is more than 0.7 of the length of the name + * (0.7 allows identifiers of length 3 to have a distance of 2 to allow for one substitution) + * Names longer than 30 characters don't get suggestions because Levenshtein distance is an n**2 algorithm. + */ + function getSpellingSuggestionForName(name: string, symbols: Symbol[], meaning: SymbolFlags): Symbol | undefined { + const worstDistance = name.length * 0.7; + let bestDistance = Number.MAX_VALUE; + let bestCandidate = undefined; + if (name.length > 30) { + return undefined; + } + name = name.toLowerCase(); + for (const candidate of symbols) { + if (candidate.flags & meaning && candidate.name && Math.abs(candidate.name.length - name.length) < 4) { + const candidateName = candidate.name.toLowerCase(); + if (candidateName === name) { + return candidate; + } + if (candidateName.length < 3) { + continue; + } + const distance = levenshtein(candidateName, name); + if (distance < 2) { + return candidate; + } + else if (distance < bestDistance && distance < worstDistance) { + bestDistance = distance; + bestCandidate = candidate; + } + } + } + return bestCandidate; + } + + function markPropertyAsReferenced(prop: Symbol) { + if (prop && + noUnusedIdentifiers && + (prop.flags & SymbolFlags.ClassMember) && + prop.valueDeclaration && (getModifierFlags(prop.valueDeclaration) & ModifierFlags.Private)) { + if (getCheckFlags(prop) & CheckFlags.Instantiated) { + getSymbolLinks(prop).target.isReferenced = true; + } + else { + prop.isReferenced = true; + } + } + } + + function isInPropertyInitializer(node: Node): boolean { + while (node) { + if (node.parent && node.parent.kind === SyntaxKind.PropertyDeclaration && (node.parent as PropertyDeclaration).initializer === node) { + return true; + } + node = node.parent; + } + return false; + } + function isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean { const left = node.kind === SyntaxKind.PropertyAccessExpression ? (node).expression diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index b69adf708f2..b205cb85cb6 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1843,6 +1843,14 @@ "category": "Error", "code": 2550 }, + "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?": { + "category": "Error", + "code": 2551 + }, + "Cannot find name '{0}'. Did you mean '{1}'?": { + "category": "Error", + "code": 2552 + }, "JSX element attributes type '{0}' may not be a union type.": { "category": "Error", "code": 2600 @@ -3532,7 +3540,10 @@ "category": "Message", "code": 90021 }, - + "Change spelling to '{0}'.": { + "category": "Message", + "code": 90022 + }, "Octal literal types must use ES2015 syntax. Use the syntax '{0}'.": { "category": "Error", diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 57cf17f7100..a923a8fff73 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2545,6 +2545,8 @@ namespace ts { tryGetMemberInModuleExports(memberName: string, moduleSymbol: Symbol): Symbol | undefined; getApparentType(type: Type): Type; + getSuggestionForNonexistentProperty(node: Identifier, containingType: Type): string | undefined; + getSuggestionForNonexistentSymbol(location: Node, name: string, meaning: SymbolFlags): string; /* @internal */ tryFindAmbientModuleWithoutAugmentations(moduleName: string): Symbol; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 646a7b22e3f..1ce2cf2c991 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4629,4 +4629,27 @@ namespace ts { export function unescapeIdentifier(identifier: string): string { return identifier.length >= 3 && identifier.charCodeAt(0) === CharacterCodes._ && identifier.charCodeAt(1) === CharacterCodes._ && identifier.charCodeAt(2) === CharacterCodes._ ? identifier.substr(1) : identifier; } + + export function levenshtein(s1: string, s2: string): number { + let previous: number[] = new Array(s2.length + 1); + let current: number[] = new Array(s2.length + 1); + for (let i = 0; i < s2.length + 1; i++) { + previous[i] = i; + current[i] = -1; + } + for (let i = 1; i < s1.length + 1; i++) { + current[0] = i; + for (let j = 1; j < s2.length + 1; j++) { + current[j] = Math.min( + previous[j] + 1, + current[j - 1] + 1, + previous[j - 1] + (s1[i - 1] === s2[j - 1] ? 0 : 2)) + } + // shift current back to previous, and then reuse previous' array + const tmp = previous; + previous = current; + current = tmp; + } + return previous[previous.length - 1]; + } } From 1bff5b749ebe67fe56028f6f31319445f7d99e92 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 1 May 2017 11:41:01 -0700 Subject: [PATCH 09/92] Codefix:suggest spellings+update others w/new codes --- src/services/codefixes/fixAddMissingMember.ts | 5 +- src/services/codefixes/fixSpelling.ts | 53 +++++++++++++++++++ src/services/codefixes/fixes.ts | 1 + src/services/codefixes/importFixes.ts | 1 + src/services/tsconfig.json | 3 +- 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/services/codefixes/fixSpelling.ts diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 8e1d0ac2f29..ef0025d2b25 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -1,7 +1,8 @@ /* @internal */ namespace ts.codefix { registerCodeFix({ - errorCodes: [Diagnostics.Property_0_does_not_exist_on_type_1.code], + errorCodes: [Diagnostics.Property_0_does_not_exist_on_type_1.code, + Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code], getCodeActions: getActionsForAddMissingMember }); @@ -135,4 +136,4 @@ namespace ts.codefix { return actions; } } -} \ No newline at end of file +} diff --git a/src/services/codefixes/fixSpelling.ts b/src/services/codefixes/fixSpelling.ts new file mode 100644 index 00000000000..b58dab95002 --- /dev/null +++ b/src/services/codefixes/fixSpelling.ts @@ -0,0 +1,53 @@ +/* @internal */ +namespace ts.codefix { + registerCodeFix({ + errorCodes: [Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_1.code], + getCodeActions: getActionsForCorrectSpelling + }); + + function getActionsForCorrectSpelling(context: CodeFixContext): CodeAction[] | undefined { + const sourceFile = context.sourceFile; + + // This is the identifier of the misspelled word. eg: + // this.speling = 1; + // ^^^^^^^ + const node = getTokenAtPosition(sourceFile, context.span.start); + const checker = context.program.getTypeChecker(); + let suggestion: string; + if (node.kind === SyntaxKind.Identifier && isPropertyAccessExpression(node.parent)) { + const containingType = checker.getTypeAtLocation(node.parent.expression); + suggestion = checker.getSuggestionForNonexistentProperty(node as Identifier, containingType); + } + else { + const meaning = getMeaningFromLocation(node); + suggestion = checker.getSuggestionForNonexistentSymbol(node, getTextOfNode(node), convertSemanticMeaningToSymbolFlags(meaning)); + } + if (suggestion) { + return [{ + description: formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Change_spelling_to_0), [suggestion]), + changes: [{ + fileName: sourceFile.fileName, + textChanges: [{ + span: { start: node.getStart(), length: node.getWidth() }, + newText: suggestion + }], + }], + }]; + } + } + + function convertSemanticMeaningToSymbolFlags(meaning: SemanticMeaning): SymbolFlags { + let flags = 0; + if (meaning & SemanticMeaning.Namespace) { + flags |= SymbolFlags.Namespace; + } + if (meaning & SemanticMeaning.Type) { + flags |= SymbolFlags.Type; + } + if (meaning & SemanticMeaning.Value) { + flags |= SymbolFlags.Value; + } + return flags; + } +} diff --git a/src/services/codefixes/fixes.ts b/src/services/codefixes/fixes.ts index ae1643dfa3b..c2e2509a28e 100644 --- a/src/services/codefixes/fixes.ts +++ b/src/services/codefixes/fixes.ts @@ -1,5 +1,6 @@ /// /// +/// /// /// /// diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 78c27a1276b..0bc18ce7667 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -116,6 +116,7 @@ namespace ts.codefix { registerCodeFix({ errorCodes: [ Diagnostics.Cannot_find_name_0.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_1.code, Diagnostics.Cannot_find_namespace_0.code, Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code ], diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 978195a31f6..fd7269d46dd 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -82,6 +82,7 @@ "formatting/tokenRange.ts", "codeFixProvider.ts", "codefixes/fixAddMissingMember.ts", + "codefixes/fixSpelling.ts", "codefixes/fixExtendsInterfaceBecomesImplements.ts", "codefixes/fixClassIncorrectlyImplementsInterface.ts", "codefixes/fixClassDoesntImplementInheritedAbstractMember.ts", @@ -94,4 +95,4 @@ "codefixes/unusedIdentifierFixes.ts", "codefixes/disableJsDiagnostics.ts" ] -} \ No newline at end of file +} From 2479c071f9f55de708aa1d7fc86543dc0bb3f486 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 1 May 2017 11:42:22 -0700 Subject: [PATCH 10/92] Update baselines --- ...ExportedAndNonExportedFunctions.errors.txt | 8 +- .../VariableDeclaration11_es6.errors.txt | 4 +- .../VariableDeclaration6_es6.errors.txt | 4 +- .../anonymousClassExpression2.errors.txt | 4 +- ...tRestElementWithErrorSourceType.errors.txt | 4 +- .../baselines/reference/autoLift2.errors.txt | 20 +- .../reference/badArrayIndex.errors.txt | 4 +- .../baselines/reference/baseCheck.errors.txt | 4 +- tests/baselines/reference/bases.errors.txt | 8 +- ...akInIterationOrSwitchStatement4.errors.txt | 4 +- ...annotInvokeNewOnIndexExpression.errors.txt | 4 +- .../checkJsxChildrenProperty4.errors.txt | 4 +- .../classExtendingPrimitive.errors.txt | 16 +- .../classExtendsEveryObjectType.errors.txt | 4 +- .../classExtendsEveryObjectType2.errors.txt | 4 +- ...assMemberWithMissingIdentifier2.errors.txt | 4 +- .../reference/complicatedPrivacy.errors.txt | 4 +- ...torWithIncompleteTypeAnnotation.errors.txt | 44 ++-- .../continueInIterationStatement4.errors.txt | 4 +- ...IntypeCheckInvocationExpression.errors.txt | 4 +- .../reference/createArray.errors.txt | 12 +- ...tructuringParameterDeclaration4.errors.txt | 4 +- .../reference/dottedModuleName.errors.txt | 4 +- ...errorMessageOnObjectLiteralType.errors.txt | 4 +- ...xportNonInitializedVariablesES6.errors.txt | 4 +- .../reference/externModule.errors.txt | 16 +- .../reference/fixSignatureCaching.errors.txt | 12 +- .../reference/innerModExport2.errors.txt | 4 +- .../letDeclarations-scopes2.errors.txt | 16 +- ...mUsingES6FeaturesWithOnlyES5Lib.errors.txt | 4 +- ...wExceptionVariableInCatchClause.errors.txt | 8 +- .../narrowFromAnyWithInstanceof.errors.txt | 8 +- .../narrowFromAnyWithTypePredicate.errors.txt | 8 +- .../newExpressionWithCast.errors.txt | 4 +- .../reference/newNonReferenceType.errors.txt | 8 +- .../reference/newOperator.errors.txt | 12 +- ...adingStaticFunctionsInFunctions.errors.txt | 8 +- ...rameterNamesInTypeParameterList.errors.txt | 24 +- .../reference/parser10.1.1-8gs.errors.txt | 4 +- .../reference/parser15.4.4.14-9-2.errors.txt | 4 +- ...erAccessAfterPostfixExpression1.errors.txt | 4 +- .../reference/parserRealSource10.errors.txt | 12 +- .../reference/parserRealSource11.errors.txt | 228 +++++++++--------- .../reference/parserRealSource13.errors.txt | 4 +- .../reference/parserRealSource7.errors.txt | 60 ++--- .../reference/parserRealSource8.errors.txt | 20 +- ...gularExpressionDivideAmbiguity1.errors.txt | 4 +- ...gularExpressionDivideAmbiguity2.errors.txt | 4 +- .../reference/parserS7.2_A1.5_T2.errors.txt | 8 +- .../reference/parserS7.3_A1.1_T2.errors.txt | 4 +- .../reference/parserS7.6_A4.2_T1.errors.txt | 132 +++++----- .../parserSkippedTokens16.errors.txt | 4 +- .../reference/parserSymbolIndexer5.errors.txt | 4 +- .../reference/parserUnicode1.errors.txt | 8 +- .../parserUnterminatedGeneric2.errors.txt | 16 +- ...akInIterationOrSwitchStatement4.errors.txt | 4 +- ...r_continueInIterationStatement4.errors.txt | 4 +- .../reference/parserharness.errors.txt | 180 +++++++------- .../reference/parserindenter.errors.txt | 4 +- .../primitiveTypeAssignment.errors.txt | 12 +- .../reference/privateIndexer2.errors.txt | 4 +- .../reference/propertyOrdering.errors.txt | 4 +- .../reference/propertySignatures.errors.txt | 4 +- .../reference/scanner10.1.1-8gs.errors.txt | 4 +- .../reference/scannerS7.2_A1.5_T2.errors.txt | 8 +- .../reference/scannerS7.3_A1.1_T2.errors.txt | 4 +- .../reference/scannerS7.6_A4.2_T1.errors.txt | 132 +++++----- .../reference/scannertest1.errors.txt | 44 ++-- .../reference/staticsInAFunction.errors.txt | 8 +- .../strictModeReservedWord.errors.txt | 4 +- .../thisTypeInFunctionsNegative.errors.txt | 4 +- .../tsxAttributeInvalidNames.errors.txt | 8 +- .../reference/typeAssertions.errors.txt | 8 +- .../typeGuardFunctionErrors.errors.txt | 32 +-- ...nstanceOfByConstructorSignature.errors.txt | 24 +- ...ersAndParametersInComputedNames.errors.txt | 4 +- .../reference/undeclaredMethod.errors.txt | 4 +- .../reference/undeclaredVarEmit.errors.txt | 4 +- .../fourslash/codeFixAddMissingMember3.ts | 2 +- .../importNameCodeFixExistingImport0.ts | 2 +- .../importNameCodeFixExistingImport1.ts | 2 +- .../importNameCodeFixExistingImport10.ts | 2 +- .../importNameCodeFixExistingImport11.ts | 2 +- .../importNameCodeFixExistingImport12.ts | 2 +- .../importNameCodeFixExistingImport2.ts | 4 +- .../importNameCodeFixExistingImport3.ts | 4 +- .../importNameCodeFixExistingImport4.ts | 2 +- .../importNameCodeFixExistingImport5.ts | 2 +- .../importNameCodeFixExistingImport6.ts | 2 +- .../importNameCodeFixExistingImport7.ts | 2 +- .../importNameCodeFixExistingImport8.ts | 2 +- .../importNameCodeFixExistingImport9.ts | 2 +- .../importNameCodeFixExistingImportEquals0.ts | 2 +- .../importNameCodeFixNewImportAmbient0.ts | 2 +- .../importNameCodeFixNewImportAmbient1.ts | 2 +- .../importNameCodeFixNewImportAmbient2.ts | 2 +- .../importNameCodeFixNewImportAmbient3.ts | 2 +- .../importNameCodeFixNewImportBaseUrl0.ts | 2 +- .../importNameCodeFixNewImportDefault0.ts | 2 +- .../importNameCodeFixNewImportFile0.ts | 2 +- .../importNameCodeFixNewImportFile1.ts | 2 +- .../importNameCodeFixNewImportFile2.ts | 2 +- .../importNameCodeFixNewImportNodeModules1.ts | 2 +- .../importNameCodeFixNewImportNodeModules2.ts | 2 +- .../importNameCodeFixNewImportNodeModules3.ts | 2 +- .../importNameCodeFixNewImportPaths0.ts | 2 +- .../importNameCodeFixNewImportPaths1.ts | 2 +- .../importNameCodeFixNewImportPaths2.ts | 2 +- .../importNameCodeFixNewImportRootDirs0.ts | 2 +- .../importNameCodeFixNewImportTypeRoots0.ts | 2 +- .../importNameCodeFixNewImportTypeRoots1.ts | 2 +- .../importNameCodeFixOptionalImport0.ts | 2 +- .../importNameCodeFixOptionalImport1.ts | 2 +- 113 files changed, 709 insertions(+), 709 deletions(-) diff --git a/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.errors.txt b/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.errors.txt index 96528577cbc..bf143b9224d 100644 --- a/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.errors.txt +++ b/tests/baselines/reference/ModuleWithExportedAndNonExportedFunctions.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAndNonExportedFunctions.ts(28,13): error TS2339: Property 'fn2' does not exist on type 'typeof A'. -tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAndNonExportedFunctions.ts(29,14): error TS2339: Property 'fng2' does not exist on type 'typeof A'. +tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAndNonExportedFunctions.ts(28,13): error TS2551: Property 'fn2' does not exist on type 'typeof A'. Did you mean 'fng'? +tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAndNonExportedFunctions.ts(29,14): error TS2551: Property 'fng2' does not exist on type 'typeof A'. Did you mean 'fng'? ==== tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAndNonExportedFunctions.ts (2 errors) ==== @@ -32,7 +32,7 @@ tests/cases/conformance/internalModules/exportDeclarations/ModuleWithExportedAnd // these should be errors since the functions are not exported var fn2 = A.fn2; ~~~ -!!! error TS2339: Property 'fn2' does not exist on type 'typeof A'. +!!! error TS2551: Property 'fn2' does not exist on type 'typeof A'. Did you mean 'fng'? var fng2 = A.fng2; ~~~~ -!!! error TS2339: Property 'fng2' does not exist on type 'typeof A'. \ No newline at end of file +!!! error TS2551: Property 'fng2' does not exist on type 'typeof A'. Did you mean 'fng'? \ No newline at end of file diff --git a/tests/baselines/reference/VariableDeclaration11_es6.errors.txt b/tests/baselines/reference/VariableDeclaration11_es6.errors.txt index 8fa0a99ab67..87650509cce 100644 --- a/tests/baselines/reference/VariableDeclaration11_es6.errors.txt +++ b/tests/baselines/reference/VariableDeclaration11_es6.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode. -tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,1): error TS2304: Cannot find name 'let'. +tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2,1): error TS2552: Cannot find name 'let'. Did you mean 'Set'? ==== tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts (2 errors) ==== @@ -8,4 +8,4 @@ tests/cases/conformance/es6/variableDeclarations/VariableDeclaration11_es6.ts(2, ~~~ !!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode. ~~~ -!!! error TS2304: Cannot find name 'let'. \ No newline at end of file +!!! error TS2552: Cannot find name 'let'. Did you mean 'Set'? \ No newline at end of file diff --git a/tests/baselines/reference/VariableDeclaration6_es6.errors.txt b/tests/baselines/reference/VariableDeclaration6_es6.errors.txt index fb2a41b8739..440a2ee3ce5 100644 --- a/tests/baselines/reference/VariableDeclaration6_es6.errors.txt +++ b/tests/baselines/reference/VariableDeclaration6_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts(1,1): error TS2304: Cannot find name 'let'. +tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts(1,1): error TS2552: Cannot find name 'let'. Did you mean 'Set'? ==== tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts (1 errors) ==== let ~~~ -!!! error TS2304: Cannot find name 'let'. \ No newline at end of file +!!! error TS2552: Cannot find name 'let'. Did you mean 'Set'? \ No newline at end of file diff --git a/tests/baselines/reference/anonymousClassExpression2.errors.txt b/tests/baselines/reference/anonymousClassExpression2.errors.txt index c9b59ae9c4d..6bc858bc542 100644 --- a/tests/baselines/reference/anonymousClassExpression2.errors.txt +++ b/tests/baselines/reference/anonymousClassExpression2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/anonymousClassExpression2.ts(13,18): error TS2339: Property 'methodA' does not exist on type 'B'. +tests/cases/compiler/anonymousClassExpression2.ts(13,18): error TS2551: Property 'methodA' does not exist on type 'B'. Did you mean 'methodB'? ==== tests/cases/compiler/anonymousClassExpression2.ts (1 errors) ==== @@ -16,7 +16,7 @@ tests/cases/compiler/anonymousClassExpression2.ts(13,18): error TS2339: Property methodB() { this.methodA; // error ~~~~~~~ -!!! error TS2339: Property 'methodA' does not exist on type 'B'. +!!! error TS2551: Property 'methodA' does not exist on type 'B'. Did you mean 'methodB'? this.methodB; // ok } } diff --git a/tests/baselines/reference/assignmentRestElementWithErrorSourceType.errors.txt b/tests/baselines/reference/assignmentRestElementWithErrorSourceType.errors.txt index 080aca5a7ac..ff79716cab8 100644 --- a/tests/baselines/reference/assignmentRestElementWithErrorSourceType.errors.txt +++ b/tests/baselines/reference/assignmentRestElementWithErrorSourceType.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/assignmentRestElementWithErrorSourceType.ts(2,5): error TS2304: Cannot find name 'c'. -tests/cases/compiler/assignmentRestElementWithErrorSourceType.ts(2,10): error TS2304: Cannot find name 'tupel'. +tests/cases/compiler/assignmentRestElementWithErrorSourceType.ts(2,10): error TS2552: Cannot find name 'tupel'. Did you mean 'tuple'? ==== tests/cases/compiler/assignmentRestElementWithErrorSourceType.ts (2 errors) ==== @@ -8,4 +8,4 @@ tests/cases/compiler/assignmentRestElementWithErrorSourceType.ts(2,10): error TS ~ !!! error TS2304: Cannot find name 'c'. ~~~~~ -!!! error TS2304: Cannot find name 'tupel'. \ No newline at end of file +!!! error TS2552: Cannot find name 'tupel'. Did you mean 'tuple'? \ No newline at end of file diff --git a/tests/baselines/reference/autoLift2.errors.txt b/tests/baselines/reference/autoLift2.errors.txt index 9af3d59420f..1111a3750d8 100644 --- a/tests/baselines/reference/autoLift2.errors.txt +++ b/tests/baselines/reference/autoLift2.errors.txt @@ -1,13 +1,13 @@ tests/cases/compiler/autoLift2.ts(5,14): error TS2339: Property 'foo' does not exist on type 'A'. tests/cases/compiler/autoLift2.ts(5,17): error TS1005: ';' expected. -tests/cases/compiler/autoLift2.ts(5,19): error TS2304: Cannot find name 'any'. -tests/cases/compiler/autoLift2.ts(6,14): error TS2339: Property 'bar' does not exist on type 'A'. +tests/cases/compiler/autoLift2.ts(5,19): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/autoLift2.ts(6,14): error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? tests/cases/compiler/autoLift2.ts(6,17): error TS1005: ';' expected. -tests/cases/compiler/autoLift2.ts(6,19): error TS2304: Cannot find name 'any'. +tests/cases/compiler/autoLift2.ts(6,19): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/compiler/autoLift2.ts(12,11): error TS2339: Property 'foo' does not exist on type 'A'. -tests/cases/compiler/autoLift2.ts(14,11): error TS2339: Property 'bar' does not exist on type 'A'. +tests/cases/compiler/autoLift2.ts(14,11): error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? tests/cases/compiler/autoLift2.ts(16,33): error TS2339: Property 'foo' does not exist on type 'A'. -tests/cases/compiler/autoLift2.ts(18,33): error TS2339: Property 'bar' does not exist on type 'A'. +tests/cases/compiler/autoLift2.ts(18,33): error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? ==== tests/cases/compiler/autoLift2.ts (10 errors) ==== @@ -21,14 +21,14 @@ tests/cases/compiler/autoLift2.ts(18,33): error TS2339: Property 'bar' does not ~ !!! error TS1005: ';' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? this.bar: any; ~~~ -!!! error TS2339: Property 'bar' does not exist on type 'A'. +!!! error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? ~ !!! error TS1005: ';' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? } @@ -40,7 +40,7 @@ tests/cases/compiler/autoLift2.ts(18,33): error TS2339: Property 'bar' does not this.bar = "bar"; ~~~ -!!! error TS2339: Property 'bar' does not exist on type 'A'. +!!! error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? [1, 2].forEach((p) => this.foo); ~~~ @@ -48,7 +48,7 @@ tests/cases/compiler/autoLift2.ts(18,33): error TS2339: Property 'bar' does not [1, 2].forEach((p) => this.bar); ~~~ -!!! error TS2339: Property 'bar' does not exist on type 'A'. +!!! error TS2551: Property 'bar' does not exist on type 'A'. Did you mean 'baz'? } diff --git a/tests/baselines/reference/badArrayIndex.errors.txt b/tests/baselines/reference/badArrayIndex.errors.txt index 4830ff1f693..12aec4d45f4 100644 --- a/tests/baselines/reference/badArrayIndex.errors.txt +++ b/tests/baselines/reference/badArrayIndex.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/badArrayIndex.ts(1,15): error TS2304: Cannot find name 'number'. +tests/cases/compiler/badArrayIndex.ts(1,15): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/compiler/badArrayIndex.ts(1,22): error TS1109: Expression expected. ==== tests/cases/compiler/badArrayIndex.ts (2 errors) ==== var results = number[]; ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? ~ !!! error TS1109: Expression expected. \ No newline at end of file diff --git a/tests/baselines/reference/baseCheck.errors.txt b/tests/baselines/reference/baseCheck.errors.txt index 1f267f55301..1353d6e1a08 100644 --- a/tests/baselines/reference/baseCheck.errors.txt +++ b/tests/baselines/reference/baseCheck.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/baseCheck.ts(9,18): error TS2304: Cannot find name 'loc'. +tests/cases/compiler/baseCheck.ts(9,18): error TS2552: Cannot find name 'loc'. Did you mean 'ELoc'? tests/cases/compiler/baseCheck.ts(17,53): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/baseCheck.ts(17,59): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/compiler/baseCheck.ts(18,62): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. @@ -20,7 +20,7 @@ tests/cases/compiler/baseCheck.ts(26,9): error TS2304: Cannot find name 'x'. constructor(x: number) { super(0, loc); ~~~ -!!! error TS2304: Cannot find name 'loc'. +!!! error TS2552: Cannot find name 'loc'. Did you mean 'ELoc'? } m() { diff --git a/tests/baselines/reference/bases.errors.txt b/tests/baselines/reference/bases.errors.txt index a61d35f664e..974d5accfc4 100644 --- a/tests/baselines/reference/bases.errors.txt +++ b/tests/baselines/reference/bases.errors.txt @@ -1,13 +1,13 @@ tests/cases/compiler/bases.ts(7,14): error TS2339: Property 'y' does not exist on type 'B'. tests/cases/compiler/bases.ts(7,15): error TS1005: ';' expected. -tests/cases/compiler/bases.ts(7,17): error TS2304: Cannot find name 'any'. +tests/cases/compiler/bases.ts(7,17): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/compiler/bases.ts(11,7): error TS2420: Class 'C' incorrectly implements interface 'I'. Property 'x' is missing in type 'C'. tests/cases/compiler/bases.ts(12,5): error TS2377: Constructors for derived classes must contain a 'super' call. tests/cases/compiler/bases.ts(13,9): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. tests/cases/compiler/bases.ts(13,14): error TS2339: Property 'x' does not exist on type 'C'. tests/cases/compiler/bases.ts(13,15): error TS1005: ';' expected. -tests/cases/compiler/bases.ts(13,17): error TS2304: Cannot find name 'any'. +tests/cases/compiler/bases.ts(13,17): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/compiler/bases.ts(17,9): error TS2339: Property 'x' does not exist on type 'C'. tests/cases/compiler/bases.ts(18,9): error TS2339: Property 'y' does not exist on type 'C'. @@ -25,7 +25,7 @@ tests/cases/compiler/bases.ts(18,9): error TS2339: Property 'y' does not exist o ~ !!! error TS1005: ';' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? } } @@ -44,7 +44,7 @@ tests/cases/compiler/bases.ts(18,9): error TS2339: Property 'y' does not exist o ~ !!! error TS1005: ';' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? } ~~~~~ !!! error TS2377: Constructors for derived classes must contain a 'super' call. diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt index c331ff09c2c..44e2d197f5a 100644 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/breakInIterationOrSwitchStatement4.ts(1,15): error TS2304: Cannot find name 'something'. +tests/cases/compiler/breakInIterationOrSwitchStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? ==== tests/cases/compiler/breakInIterationOrSwitchStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2304: Cannot find name 'something'. +!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? break; } \ No newline at end of file diff --git a/tests/baselines/reference/cannotInvokeNewOnIndexExpression.errors.txt b/tests/baselines/reference/cannotInvokeNewOnIndexExpression.errors.txt index 7be5a1f086c..5e1b869c057 100644 --- a/tests/baselines/reference/cannotInvokeNewOnIndexExpression.errors.txt +++ b/tests/baselines/reference/cannotInvokeNewOnIndexExpression.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/cannotInvokeNewOnIndexExpression.ts(1,23): error TS2304: Cannot find name 'any'. +tests/cases/compiler/cannotInvokeNewOnIndexExpression.ts(1,23): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ==== tests/cases/compiler/cannotInvokeNewOnIndexExpression.ts (1 errors) ==== var test: any[] = new any[1]; ~~~ -!!! error TS2304: Cannot find name 'any'. \ No newline at end of file +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? \ No newline at end of file diff --git a/tests/baselines/reference/checkJsxChildrenProperty4.errors.txt b/tests/baselines/reference/checkJsxChildrenProperty4.errors.txt index d12c557102c..399b159f482 100644 --- a/tests/baselines/reference/checkJsxChildrenProperty4.errors.txt +++ b/tests/baselines/reference/checkJsxChildrenProperty4.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(24,28): error TS2339: Property 'NAme' does not exist on type 'IUser'. +tests/cases/conformance/jsx/file.tsx(24,28): error TS2551: Property 'NAme' does not exist on type 'IUser'. Did you mean 'Name'? tests/cases/conformance/jsx/file.tsx(32,9): error TS2322: Type '{ children: ((user: IUser) => Element)[]; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & IFetchUserProps & { children?: ReactNode; }'. Type '{ children: ((user: IUser) => Element)[]; }' is not assignable to type 'IFetchUserProps'. Types of property 'children' are incompatible. @@ -32,7 +32,7 @@ tests/cases/conformance/jsx/file.tsx(32,9): error TS2322: Type '{ children: ((us { user => (

{ user.NAme }

~~~~ -!!! error TS2339: Property 'NAme' does not exist on type 'IUser'. +!!! error TS2551: Property 'NAme' does not exist on type 'IUser'. Did you mean 'Name'? ) }
); diff --git a/tests/baselines/reference/classExtendingPrimitive.errors.txt b/tests/baselines/reference/classExtendingPrimitive.errors.txt index 554e0fbecbc..fc2e5bd5ad7 100644 --- a/tests/baselines/reference/classExtendingPrimitive.errors.txt +++ b/tests/baselines/reference/classExtendingPrimitive.errors.txt @@ -1,11 +1,11 @@ -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(3,17): error TS2304: Cannot find name 'number'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(4,18): error TS2304: Cannot find name 'string'. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(5,18): error TS2304: Cannot find name 'boolean'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(3,17): error TS2552: Cannot find name 'number'. Did you mean 'Number'? +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(4,18): error TS2552: Cannot find name 'string'. Did you mean 'String'? +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(5,18): error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(6,18): error TS2304: Cannot find name 'Void'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(7,19): error TS1109: Expression expected. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(8,18): error TS2304: Cannot find name 'Null'. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(10,18): error TS2507: Type 'undefined' is not a constructor function type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(11,18): error TS2304: Cannot find name 'Undefined'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(11,18): error TS2552: Cannot find name 'Undefined'. Did you mean 'undefined'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendingPrimitive.ts(14,18): error TS2507: Type 'typeof E' is not a constructor function type. @@ -14,13 +14,13 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla class C extends number { } ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? class C2 extends string { } ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? class C3 extends boolean { } ~~~~~~~ -!!! error TS2304: Cannot find name 'boolean'. +!!! error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? class C4 extends Void { } ~~~~ !!! error TS2304: Cannot find name 'Void'. @@ -36,7 +36,7 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla !!! error TS2507: Type 'undefined' is not a constructor function type. class C7 extends Undefined { } ~~~~~~~~~ -!!! error TS2304: Cannot find name 'Undefined'. +!!! error TS2552: Cannot find name 'Undefined'. Did you mean 'undefined'? enum E { A } class C8 extends E { } diff --git a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt index e1c5137e3a9..7c624b3b284 100644 --- a/tests/baselines/reference/classExtendsEveryObjectType.errors.txt +++ b/tests/baselines/reference/classExtendsEveryObjectType.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(4,17): error TS2689: Cannot extend an interface 'I'. Did you mean 'implements'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,18): error TS2507: Type '{ foo: any; }' is not a constructor function type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,25): error TS2304: Cannot find name 'string'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,25): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(6,31): error TS1005: ',' expected. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(8,18): error TS2507: Type '{ foo: string; }' is not a constructor function type. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType.ts(11,18): error TS2507: Type 'typeof M' is not a constructor function type. @@ -20,7 +20,7 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla ~~~~~~~~~~~~~~~~ !!! error TS2507: Type '{ foo: any; }' is not a constructor function type. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ',' expected. var x: { foo: string; } diff --git a/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt b/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt index af52a248b54..e92761884ea 100644 --- a/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt +++ b/tests/baselines/reference/classExtendsEveryObjectType2.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,18): error TS2507: Type '{ foo: any; }' is not a constructor function type. -tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,25): error TS2304: Cannot find name 'string'. +tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,25): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(1,31): error TS1005: ',' expected. tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/classExtendsEveryObjectType2.ts(3,18): error TS2507: Type 'undefined[]' is not a constructor function type. @@ -9,7 +9,7 @@ tests/cases/conformance/classes/classDeclarations/classHeritageSpecification/cla ~~~~~~~~~~~~~~~~ !!! error TS2507: Type '{ foo: any; }' is not a constructor function type. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ',' expected. diff --git a/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt b/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt index b21e062e3b0..d0459214fd1 100644 --- a/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt +++ b/tests/baselines/reference/classMemberWithMissingIdentifier2.errors.txt @@ -2,7 +2,7 @@ tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,11): error TS1146: D tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,12): error TS1005: '=' expected. tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,14): error TS2304: Cannot find name 'name'. tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,18): error TS1005: ']' expected. -tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,19): error TS2304: Cannot find name 'string'. +tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,19): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,25): error TS1005: ',' expected. tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,26): error TS1136: Property assignment expected. tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,27): error TS2304: Cannot find name 'VariableDeclaration'. @@ -20,7 +20,7 @@ tests/cases/compiler/classMemberWithMissingIdentifier2.ts(2,27): error TS2304: C ~ !!! error TS1005: ']' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ',' expected. ~ diff --git a/tests/baselines/reference/complicatedPrivacy.errors.txt b/tests/baselines/reference/complicatedPrivacy.errors.txt index c81605a5a83..ccf0b4fa025 100644 --- a/tests/baselines/reference/complicatedPrivacy.errors.txt +++ b/tests/baselines/reference/complicatedPrivacy.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/complicatedPrivacy.ts(11,24): error TS1054: A 'get' accessor cannot have parameters. tests/cases/compiler/complicatedPrivacy.ts(35,5): error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. -tests/cases/compiler/complicatedPrivacy.ts(35,6): error TS2304: Cannot find name 'number'. +tests/cases/compiler/complicatedPrivacy.ts(35,6): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/compiler/complicatedPrivacy.ts(73,55): error TS2694: Namespace 'mglo5' has no exported member 'i6'. @@ -45,7 +45,7 @@ tests/cases/compiler/complicatedPrivacy.ts(73,55): error TS2694: Namespace 'mglo ~~~~~~~~ !!! error TS1170: A computed property name in a type literal must directly refer to a built-in symbol. ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? }) { } diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index a572e0b34c8..99d1e48bf28 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -50,39 +50,39 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(227,13): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(234,14): error TS1005: '{' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,9): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,16): error TS2304: Cannot find name 'method1'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,24): error TS2304: Cannot find name 'val'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,24): error TS2552: Cannot find name 'val'. Did you mean 'eval'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,27): error TS1005: ',' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,28): error TS2304: Cannot find name 'number'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,28): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(235,36): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,9): error TS1128: Declaration or statement expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,16): error TS2304: Cannot find name 'method2'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(238,26): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(241,5): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(246,25): error TS2339: Property 'method1' does not exist on type 'B'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(246,25): error TS2551: Property 'method1' does not exist on type 'B'. Did you mean 'method2'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,9): error TS2390: Constructor implementation is missing. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,21): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,44): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,69): error TS1110: Type expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,9): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,16): error TS2304: Cannot find name 'Overloads'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,26): error TS2304: Cannot find name 'value'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,16): error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,26): error TS2552: Cannot find name 'value'. Did you mean 'eval'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,31): error TS1005: ',' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,33): error TS2304: Cannot find name 'string'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,33): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,9): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,16): error TS2304: Cannot find name 'Overloads'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,16): error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,27): error TS1135: Argument expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,33): error TS1005: '(' expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,35): error TS2304: Cannot find name 'string'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,35): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,43): error TS1109: Expression expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,52): error TS2304: Cannot find name 'string'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,52): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,60): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,65): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,9): error TS2304: Cannot find name 'public'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,16): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,16): error TS2304: Cannot find name 'DefaultValue'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error TS2304: Cannot find name 'value'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error TS2552: Cannot find name 'value'. Did you mean 'eval'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,35): error TS1109: Expression expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2304: Cannot find name 'string'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,55): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS1128: Declaration or statement expected. @@ -431,11 +431,11 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~~ !!! error TS2304: Cannot find name 'method1'. ~~~ -!!! error TS2304: Cannot find name 'val'. +!!! error TS2552: Cannot find name 'val'. Did you mean 'eval'? ~ !!! error TS1005: ',' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? ~ !!! error TS1005: ';' expected. return val; @@ -458,7 +458,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS public method2() { return this.method1(2); ~~~~~~~ -!!! error TS2339: Property 'method1' does not exist on type 'B'. +!!! error TS2551: Property 'method1' does not exist on type 'B'. Did you mean 'method2'? } } @@ -480,28 +480,28 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~ !!! error TS1128: Declaration or statement expected. ~~~~~~~~~ -!!! error TS2304: Cannot find name 'Overloads'. +!!! error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? ~~~~~ -!!! error TS2304: Cannot find name 'value'. +!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? ~ !!! error TS1005: ',' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? public Overloads( while : string, ...rest: string[]) { & ~~~~~~ !!! error TS1128: Declaration or statement expected. ~~~~~~~~~ -!!! error TS2304: Cannot find name 'Overloads'. +!!! error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? ~~~~~ !!! error TS1135: Argument expression expected. ~ !!! error TS1005: '(' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~~~ !!! error TS1109: Expression expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ';' expected. ~ @@ -515,11 +515,11 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DefaultValue'. ~~~~~ -!!! error TS2304: Cannot find name 'value'. +!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? ~ !!! error TS1109: Expression expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ';' expected. } diff --git a/tests/baselines/reference/continueInIterationStatement4.errors.txt b/tests/baselines/reference/continueInIterationStatement4.errors.txt index bbc20570547..24bed78aeca 100644 --- a/tests/baselines/reference/continueInIterationStatement4.errors.txt +++ b/tests/baselines/reference/continueInIterationStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/continueInIterationStatement4.ts(1,15): error TS2304: Cannot find name 'something'. +tests/cases/compiler/continueInIterationStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? ==== tests/cases/compiler/continueInIterationStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2304: Cannot find name 'something'. +!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? continue; } \ No newline at end of file diff --git a/tests/baselines/reference/crashIntypeCheckInvocationExpression.errors.txt b/tests/baselines/reference/crashIntypeCheckInvocationExpression.errors.txt index a1f5afbde13..e1bcb5fcb69 100644 --- a/tests/baselines/reference/crashIntypeCheckInvocationExpression.errors.txt +++ b/tests/baselines/reference/crashIntypeCheckInvocationExpression.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(6,28): error TS2304: Cannot find name 'task'. -tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(8,18): error TS2304: Cannot find name 'path'. +tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(8,18): error TS2552: Cannot find name 'path'. Did you mean 'Math'? tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(9,19): error TS2347: Untyped function calls may not accept type arguments. tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(10,50): error TS2304: Cannot find name 'moduleType'. @@ -16,7 +16,7 @@ tests/cases/compiler/crashIntypeCheckInvocationExpression.ts(10,50): error TS230 var folder = path.join(), ~~~~ -!!! error TS2304: Cannot find name 'path'. +!!! error TS2552: Cannot find name 'path'. Did you mean 'Math'? fileset = nake.fileSetSync(folder) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2347: Untyped function calls may not accept type arguments. diff --git a/tests/baselines/reference/createArray.errors.txt b/tests/baselines/reference/createArray.errors.txt index 31f6b880030..e562abd282c 100644 --- a/tests/baselines/reference/createArray.errors.txt +++ b/tests/baselines/reference/createArray.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/createArray.ts(1,12): error TS2304: Cannot find name 'number'. +tests/cases/compiler/createArray.ts(1,12): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/compiler/createArray.ts(1,18): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/createArray.ts(6,6): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/createArray.ts(7,12): error TS2304: Cannot find name 'boolean'. +tests/cases/compiler/createArray.ts(7,12): error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? tests/cases/compiler/createArray.ts(7,19): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/createArray.ts(8,12): error TS2304: Cannot find name 'string'. +tests/cases/compiler/createArray.ts(8,12): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/createArray.ts(8,18): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. ==== tests/cases/compiler/createArray.ts (7 errors) ==== var na=new number[]; ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. @@ -22,12 +22,12 @@ tests/cases/compiler/createArray.ts(8,18): error TS1150: 'new T[]' cannot be use !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var ba=new boolean[]; ~~~~~~~ -!!! error TS2304: Cannot find name 'boolean'. +!!! error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var sa=new string[]; ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. function f(s:string):number { return 0; diff --git a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt index 8db71591f47..cdc7938d1af 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt +++ b/tests/baselines/reference/destructuringParameterDeclaration4.errors.txt @@ -3,7 +3,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(14,17): error TS1047: A rest parameter cannot be optional. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(15,16): error TS1048: A rest parameter cannot have an initializer. tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(20,19): error TS2345: Argument of type 'true' is not assignable to parameter of type 'string | number'. -tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(21,7): error TS2304: Cannot find name 'array2'. +tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(21,7): error TS2552: Cannot find name 'array2'. Did you mean 'Array'? tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(22,4): error TS2345: Argument of type '[number, number, string, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'. Types of property '2' are incompatible. Type 'string' is not assignable to type '[[any]]'. @@ -50,7 +50,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts( !!! error TS2345: Argument of type 'true' is not assignable to parameter of type 'string | number'. a1(...array2); // Error parameter type is (number|string)[] ~~~~~~ -!!! error TS2304: Cannot find name 'array2'. +!!! error TS2552: Cannot find name 'array2'. Did you mean 'Array'? a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2345: Argument of type '[number, number, string, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'. diff --git a/tests/baselines/reference/dottedModuleName.errors.txt b/tests/baselines/reference/dottedModuleName.errors.txt index afb8b944355..a2fa71430f8 100644 --- a/tests/baselines/reference/dottedModuleName.errors.txt +++ b/tests/baselines/reference/dottedModuleName.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/dottedModuleName.ts(3,29): error TS1144: '{' or ';' expected. -tests/cases/compiler/dottedModuleName.ts(3,33): error TS2304: Cannot find name 'x'. +tests/cases/compiler/dottedModuleName.ts(3,33): error TS2552: Cannot find name 'x'. Did you mean 'X'? ==== tests/cases/compiler/dottedModuleName.ts (2 errors) ==== @@ -9,7 +9,7 @@ tests/cases/compiler/dottedModuleName.ts(3,33): error TS2304: Cannot find name ' ~~ !!! error TS1144: '{' or ';' expected. ~ -!!! error TS2304: Cannot find name 'x'. +!!! error TS2552: Cannot find name 'x'. Did you mean 'X'? export module X.Y.Z { export var v2=f(v); } diff --git a/tests/baselines/reference/errorMessageOnObjectLiteralType.errors.txt b/tests/baselines/reference/errorMessageOnObjectLiteralType.errors.txt index bf9006a7143..7dffc9053e3 100644 --- a/tests/baselines/reference/errorMessageOnObjectLiteralType.errors.txt +++ b/tests/baselines/reference/errorMessageOnObjectLiteralType.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/errorMessageOnObjectLiteralType.ts(5,3): error TS2339: Property 'getOwnPropertyNamess' does not exist on type '{ a: string; b: number; }'. -tests/cases/compiler/errorMessageOnObjectLiteralType.ts(6,8): error TS2339: Property 'getOwnPropertyNamess' does not exist on type 'ObjectConstructor'. +tests/cases/compiler/errorMessageOnObjectLiteralType.ts(6,8): error TS2551: Property 'getOwnPropertyNamess' does not exist on type 'ObjectConstructor'. Did you mean 'getOwnPropertyNames'? ==== tests/cases/compiler/errorMessageOnObjectLiteralType.ts (2 errors) ==== @@ -12,4 +12,4 @@ tests/cases/compiler/errorMessageOnObjectLiteralType.ts(6,8): error TS2339: Prop !!! error TS2339: Property 'getOwnPropertyNamess' does not exist on type '{ a: string; b: number; }'. Object.getOwnPropertyNamess(null); ~~~~~~~~~~~~~~~~~~~~ -!!! error TS2339: Property 'getOwnPropertyNamess' does not exist on type 'ObjectConstructor'. \ No newline at end of file +!!! error TS2551: Property 'getOwnPropertyNamess' does not exist on type 'ObjectConstructor'. Did you mean 'getOwnPropertyNames'? \ No newline at end of file diff --git a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt index 84f9bcb59a4..60850c06b6d 100644 --- a/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt +++ b/tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(1,4): error TS1123: Variable declaration list cannot be empty. tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,1): error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. -tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,1): error TS2304: Cannot find name 'let'. +tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,1): error TS2552: Cannot find name 'let'. Did you mean 'Set'? tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,6): error TS1123: Variable declaration list cannot be empty. @@ -12,7 +12,7 @@ tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,6) ~~~ !!! error TS1214: Identifier expected. 'let' is a reserved word in strict mode. Modules are automatically in strict mode. ~~~ -!!! error TS2304: Cannot find name 'let'. +!!! error TS2552: Cannot find name 'let'. Did you mean 'Set'? const; !!! error TS1123: Variable declaration list cannot be empty. diff --git a/tests/baselines/reference/externModule.errors.txt b/tests/baselines/reference/externModule.errors.txt index 8d4126350c1..d6659c1d548 100644 --- a/tests/baselines/reference/externModule.errors.txt +++ b/tests/baselines/reference/externModule.errors.txt @@ -8,10 +8,10 @@ tests/cases/compiler/externModule.ts(18,6): error TS2390: Constructor implementa tests/cases/compiler/externModule.ts(20,13): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/externModule.ts(26,13): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/externModule.ts(28,13): error TS2391: Function implementation is missing or not immediately following the declaration. -tests/cases/compiler/externModule.ts(32,11): error TS2304: Cannot find name 'XDate'. -tests/cases/compiler/externModule.ts(34,7): error TS2304: Cannot find name 'XDate'. -tests/cases/compiler/externModule.ts(36,7): error TS2304: Cannot find name 'XDate'. -tests/cases/compiler/externModule.ts(37,3): error TS2304: Cannot find name 'XDate'. +tests/cases/compiler/externModule.ts(32,11): error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? +tests/cases/compiler/externModule.ts(34,7): error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? +tests/cases/compiler/externModule.ts(36,7): error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? +tests/cases/compiler/externModule.ts(37,3): error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? ==== tests/cases/compiler/externModule.ts (14 errors) ==== @@ -68,17 +68,17 @@ tests/cases/compiler/externModule.ts(37,3): error TS2304: Cannot find name 'XDat var d=new XDate(); ~~~~~ -!!! error TS2304: Cannot find name 'XDate'. +!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? d.getDay(); d=new XDate(1978,2); ~~~~~ -!!! error TS2304: Cannot find name 'XDate'. +!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? d.getXDate(); var n=XDate.parse("3/2/2004"); ~~~~~ -!!! error TS2304: Cannot find name 'XDate'. +!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? n=XDate.UTC(1964,2,1); ~~~~~ -!!! error TS2304: Cannot find name 'XDate'. +!!! error TS2552: Cannot find name 'XDate'. Did you mean 'Date'? \ No newline at end of file diff --git a/tests/baselines/reference/fixSignatureCaching.errors.txt b/tests/baselines/reference/fixSignatureCaching.errors.txt index 7a5c43c966e..573857d6cb2 100644 --- a/tests/baselines/reference/fixSignatureCaching.errors.txt +++ b/tests/baselines/reference/fixSignatureCaching.errors.txt @@ -64,9 +64,9 @@ tests/cases/conformance/fixSignatureCaching.ts(970,18): error TS2339: Property ' tests/cases/conformance/fixSignatureCaching.ts(975,16): error TS2304: Cannot find name 'module'. tests/cases/conformance/fixSignatureCaching.ts(975,42): error TS2304: Cannot find name 'module'. tests/cases/conformance/fixSignatureCaching.ts(976,37): error TS2304: Cannot find name 'module'. -tests/cases/conformance/fixSignatureCaching.ts(977,23): error TS2304: Cannot find name 'define'. -tests/cases/conformance/fixSignatureCaching.ts(977,48): error TS2304: Cannot find name 'define'. -tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2304: Cannot find name 'define'. +tests/cases/conformance/fixSignatureCaching.ts(977,23): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +tests/cases/conformance/fixSignatureCaching.ts(977,48): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? tests/cases/conformance/fixSignatureCaching.ts(979,23): error TS2304: Cannot find name 'window'. tests/cases/conformance/fixSignatureCaching.ts(980,37): error TS2304: Cannot find name 'window'. @@ -1182,12 +1182,12 @@ tests/cases/conformance/fixSignatureCaching.ts(980,37): error TS2304: Cannot fin !!! error TS2304: Cannot find name 'module'. } else if (typeof define === 'function' && define.amd) { ~~~~~~ -!!! error TS2304: Cannot find name 'define'. +!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? ~~~~~~ -!!! error TS2304: Cannot find name 'define'. +!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? return define; ~~~~~~ -!!! error TS2304: Cannot find name 'define'. +!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? } else if (typeof window !== 'undefined') { ~~~~~~ !!! error TS2304: Cannot find name 'window'. diff --git a/tests/baselines/reference/innerModExport2.errors.txt b/tests/baselines/reference/innerModExport2.errors.txt index f9568bb45a4..edd22daca41 100644 --- a/tests/baselines/reference/innerModExport2.errors.txt +++ b/tests/baselines/reference/innerModExport2.errors.txt @@ -2,7 +2,7 @@ tests/cases/compiler/innerModExport2.ts(5,5): error TS2304: Cannot find name 'mo tests/cases/compiler/innerModExport2.ts(5,12): error TS1005: ';' expected. tests/cases/compiler/innerModExport2.ts(7,20): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local. tests/cases/compiler/innerModExport2.ts(13,9): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local. -tests/cases/compiler/innerModExport2.ts(20,7): error TS2339: Property 'NonExportFunc' does not exist on type 'typeof Outer'. +tests/cases/compiler/innerModExport2.ts(20,7): error TS2551: Property 'NonExportFunc' does not exist on type 'typeof Outer'. Did you mean 'ExportFunc'? ==== tests/cases/compiler/innerModExport2.ts (5 errors) ==== @@ -35,4 +35,4 @@ tests/cases/compiler/innerModExport2.ts(20,7): error TS2339: Property 'NonExport Outer.NonExportFunc(); ~~~~~~~~~~~~~ -!!! error TS2339: Property 'NonExportFunc' does not exist on type 'typeof Outer'. \ No newline at end of file +!!! error TS2551: Property 'NonExportFunc' does not exist on type 'typeof Outer'. Did you mean 'ExportFunc'? \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-scopes2.errors.txt b/tests/baselines/reference/letDeclarations-scopes2.errors.txt index 8e0cf04aa14..e451eb0ad07 100644 --- a/tests/baselines/reference/letDeclarations-scopes2.errors.txt +++ b/tests/baselines/reference/letDeclarations-scopes2.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/letDeclarations-scopes2.ts(8,5): error TS2304: Cannot find name 'local2'. -tests/cases/compiler/letDeclarations-scopes2.ts(20,5): error TS2304: Cannot find name 'local2'. -tests/cases/compiler/letDeclarations-scopes2.ts(23,1): error TS2304: Cannot find name 'local'. -tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2304: Cannot find name 'local2'. +tests/cases/compiler/letDeclarations-scopes2.ts(8,5): error TS2552: Cannot find name 'local2'. Did you mean 'local'? +tests/cases/compiler/letDeclarations-scopes2.ts(20,5): error TS2552: Cannot find name 'local2'. Did you mean 'local'? +tests/cases/compiler/letDeclarations-scopes2.ts(23,1): error TS2552: Cannot find name 'local'. Did you mean 'global'? +tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2552: Cannot find name 'local2'. Did you mean 'global'? ==== tests/cases/compiler/letDeclarations-scopes2.ts (4 errors) ==== @@ -14,7 +14,7 @@ tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2304: Cannot find global; // OK local2; // Error ~~~~~~ -!!! error TS2304: Cannot find name 'local2'. +!!! error TS2552: Cannot find name 'local2'. Did you mean 'local'? { let local2 = 0; @@ -28,14 +28,14 @@ tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2304: Cannot find global; // OK local2; // Error ~~~~~~ -!!! error TS2304: Cannot find name 'local2'. +!!! error TS2552: Cannot find name 'local2'. Did you mean 'local'? } local; // Error ~~~~~ -!!! error TS2304: Cannot find name 'local'. +!!! error TS2552: Cannot find name 'local'. Did you mean 'global'? global; // OK local2; // Error ~~~~~~ -!!! error TS2304: Cannot find name 'local2'. +!!! error TS2552: Cannot find name 'local2'. Did you mean 'global'? \ No newline at end of file diff --git a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt index 80b8e345cde..b56b03de533 100644 --- a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt +++ b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(4,18): error TS2339: Property 'from' does not exist on type 'ArrayConstructor'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(10,13): error TS2304: Cannot find name 'Map'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(17,5): error TS2339: Property 'name' does not exist on type '() => void'. -tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(20,6): error TS2339: Property 'sign' does not exist on type 'Math'. +tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(20,6): error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'sin'? tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(25,6): error TS2304: Cannot find name 'Symbol'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(29,18): error TS2304: Cannot find name 'Symbol'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(33,13): error TS2304: Cannot find name 'Proxy'. @@ -40,7 +40,7 @@ tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.t // Using ES6 math Math.sign(1); ~~~~ -!!! error TS2339: Property 'sign' does not exist on type 'Math'. +!!! error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'sin'? // Using ES6 object var o = { diff --git a/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt b/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt index e435b98050d..248d4c35473 100644 --- a/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt +++ b/tests/baselines/reference/narrowExceptionVariableInCatchClause.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(11,17): error TS2339: Property 'doPanic' does not exist on type '{ type: "foo"; dontPanic(): any; }'. -tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(16,17): error TS2339: Property 'massage' does not exist on type 'Error'. +tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(11,17): error TS2551: Property 'doPanic' does not exist on type '{ type: "foo"; dontPanic(): any; }'. Did you mean 'dontPanic'? +tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(16,17): error TS2551: Property 'massage' does not exist on type 'Error'. Did you mean 'message'? ==== tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts (2 errors) ==== @@ -15,14 +15,14 @@ tests/cases/conformance/types/any/narrowExceptionVariableInCatchClause.ts(16,17) err.dontPanic(); // OK err.doPanic(); // ERROR: Property 'doPanic' does not exist on type '{...}' ~~~~~~~ -!!! error TS2339: Property 'doPanic' does not exist on type '{ type: "foo"; dontPanic(): any; }'. +!!! error TS2551: Property 'doPanic' does not exist on type '{ type: "foo"; dontPanic(): any; }'. Did you mean 'dontPanic'? } else if (err instanceof Error) { err.message; err.massage; // ERROR: Property 'massage' does not exist on type 'Error' ~~~~~~~ -!!! error TS2339: Property 'massage' does not exist on type 'Error'. +!!! error TS2551: Property 'massage' does not exist on type 'Error'. Did you mean 'message'? } else { diff --git a/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt b/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt index 3e152b0faf4..f8465651901 100644 --- a/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt +++ b/tests/baselines/reference/narrowFromAnyWithInstanceof.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(17,7): error TS2339: Property 'mesage' does not exist on type 'Error'. -tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS2339: Property 'getHuors' does not exist on type 'Date'. +tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(17,7): error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? +tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? ==== tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts (2 errors) ==== @@ -21,13 +21,13 @@ tests/cases/conformance/types/any/narrowFromAnyWithInstanceof.ts(22,7): error TS x.message; x.mesage; ~~~~~~ -!!! error TS2339: Property 'mesage' does not exist on type 'Error'. +!!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? } if (x instanceof Date) { x.getDate(); x.getHuors(); ~~~~~~~~ -!!! error TS2339: Property 'getHuors' does not exist on type 'Date'. +!!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? } \ No newline at end of file diff --git a/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt b/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt index c06c8a98801..4865748f332 100644 --- a/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt +++ b/tests/baselines/reference/narrowFromAnyWithTypePredicate.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(22,7): error TS2339: Property 'method' does not exist on type '{}'. tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(23,5): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. -tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(28,7): error TS2339: Property 'mesage' does not exist on type 'Error'. -tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error TS2339: Property 'getHuors' does not exist on type 'Date'. +tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(28,7): error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? +tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? ==== tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts (4 errors) ==== @@ -38,13 +38,13 @@ tests/cases/conformance/types/any/narrowFromAnyWithTypePredicate.ts(33,7): error x.message; x.mesage; ~~~~~~ -!!! error TS2339: Property 'mesage' does not exist on type 'Error'. +!!! error TS2551: Property 'mesage' does not exist on type 'Error'. Did you mean 'message'? } if (isDate(x)) { x.getDate(); x.getHuors(); ~~~~~~~~ -!!! error TS2339: Property 'getHuors' does not exist on type 'Date'. +!!! error TS2551: Property 'getHuors' does not exist on type 'Date'. Did you mean 'getHours'? } \ No newline at end of file diff --git a/tests/baselines/reference/newExpressionWithCast.errors.txt b/tests/baselines/reference/newExpressionWithCast.errors.txt index 4fc4ee24d8c..158856f7beb 100644 --- a/tests/baselines/reference/newExpressionWithCast.errors.txt +++ b/tests/baselines/reference/newExpressionWithCast.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/newExpressionWithCast.ts(3,12): error TS7009: 'new' expression, whose target lacks a construct signature, implicitly has an 'any' type. tests/cases/compiler/newExpressionWithCast.ts(7,13): error TS2365: Operator '>' cannot be applied to types 'boolean' and 'void'. tests/cases/compiler/newExpressionWithCast.ts(7,17): error TS1109: Expression expected. -tests/cases/compiler/newExpressionWithCast.ts(7,18): error TS2304: Cannot find name 'any'. +tests/cases/compiler/newExpressionWithCast.ts(7,18): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ==== tests/cases/compiler/newExpressionWithCast.ts (4 errors) ==== @@ -19,7 +19,7 @@ tests/cases/compiler/newExpressionWithCast.ts(7,18): error TS2304: Cannot find n ~ !!! error TS1109: Expression expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? function Test3() { } // valid with noImplicitAny diff --git a/tests/baselines/reference/newNonReferenceType.errors.txt b/tests/baselines/reference/newNonReferenceType.errors.txt index a68eba9b9e7..4cf478b6e22 100644 --- a/tests/baselines/reference/newNonReferenceType.errors.txt +++ b/tests/baselines/reference/newNonReferenceType.errors.txt @@ -1,12 +1,12 @@ -tests/cases/compiler/newNonReferenceType.ts(1,13): error TS2304: Cannot find name 'any'. -tests/cases/compiler/newNonReferenceType.ts(2,13): error TS2304: Cannot find name 'boolean'. +tests/cases/compiler/newNonReferenceType.ts(1,13): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/newNonReferenceType.ts(2,13): error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? ==== tests/cases/compiler/newNonReferenceType.ts (2 errors) ==== var a = new any(); ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? var b = new boolean(); // error ~~~~~~~ -!!! error TS2304: Cannot find name 'boolean'. +!!! error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? \ No newline at end of file diff --git a/tests/baselines/reference/newOperator.errors.txt b/tests/baselines/reference/newOperator.errors.txt index fc6f22d9eac..6c07677acd3 100644 --- a/tests/baselines/reference/newOperator.errors.txt +++ b/tests/baselines/reference/newOperator.errors.txt @@ -1,10 +1,10 @@ tests/cases/compiler/newOperator.ts(3,13): error TS2693: 'ifc' only refers to a type, but is being used as a value here. tests/cases/compiler/newOperator.ts(10,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. tests/cases/compiler/newOperator.ts(11,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. -tests/cases/compiler/newOperator.ts(12,5): error TS2304: Cannot find name 'string'. -tests/cases/compiler/newOperator.ts(18,14): error TS2304: Cannot find name 'string'. +tests/cases/compiler/newOperator.ts(12,5): error TS2552: Cannot find name 'string'. Did you mean 'String'? +tests/cases/compiler/newOperator.ts(18,14): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/newOperator.ts(18,20): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/compiler/newOperator.ts(21,1): error TS2304: Cannot find name 'string'. +tests/cases/compiler/newOperator.ts(21,1): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/newOperator.ts(22,1): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/compiler/newOperator.ts(28,13): error TS2304: Cannot find name 'q'. tests/cases/compiler/newOperator.ts(31,10): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. @@ -32,7 +32,7 @@ tests/cases/compiler/newOperator.ts(45,23): error TS1150: 'new T[]' cannot be us !!! error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature. new string; ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? // Use in LHS of expression? (new Date()).toString(); @@ -40,14 +40,14 @@ tests/cases/compiler/newOperator.ts(45,23): error TS1150: 'new T[]' cannot be us // Various spacing var t3 = new string[]( ); ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. var t4 = new string ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? [ ~ ] diff --git a/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt index ae16b59b095..4aa261d9808 100644 --- a/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt +++ b/tests/baselines/reference/overloadingStaticFunctionsInFunctions.errors.txt @@ -5,12 +5,12 @@ tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,3): error TS1128 tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,10): error TS2304: Cannot find name 'test'. tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,15): error TS2304: Cannot find name 'name'. tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,19): error TS1005: ',' expected. -tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,20): error TS2304: Cannot find name 'string'. +tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(3,20): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,3): error TS1128: Declaration or statement expected. tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,10): error TS2304: Cannot find name 'test'. tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,15): error TS2304: Cannot find name 'name'. tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,20): error TS1109: Expression expected. -tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,21): error TS2304: Cannot find name 'any'. +tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,25): error TS1005: ';' expected. @@ -33,7 +33,7 @@ tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,25): error TS100 ~ !!! error TS1005: ',' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? static test(name?:any){ } ~~~~~~ !!! error TS1128: Declaration or statement expected. @@ -44,7 +44,7 @@ tests/cases/compiler/overloadingStaticFunctionsInFunctions.ts(4,25): error TS100 ~ !!! error TS1109: Expression expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ~ !!! error TS1005: ';' expected. } \ No newline at end of file diff --git a/tests/baselines/reference/parameterNamesInTypeParameterList.errors.txt b/tests/baselines/reference/parameterNamesInTypeParameterList.errors.txt index 54ddb963f94..c4e29ca62f9 100644 --- a/tests/baselines/reference/parameterNamesInTypeParameterList.errors.txt +++ b/tests/baselines/reference/parameterNamesInTypeParameterList.errors.txt @@ -1,44 +1,44 @@ -tests/cases/compiler/parameterNamesInTypeParameterList.ts(1,30): error TS2304: Cannot find name 'a'. -tests/cases/compiler/parameterNamesInTypeParameterList.ts(5,30): error TS2304: Cannot find name 'a'. -tests/cases/compiler/parameterNamesInTypeParameterList.ts(9,30): error TS2304: Cannot find name 'a'. -tests/cases/compiler/parameterNamesInTypeParameterList.ts(14,22): error TS2304: Cannot find name 'a'. -tests/cases/compiler/parameterNamesInTypeParameterList.ts(17,22): error TS2304: Cannot find name 'a'. -tests/cases/compiler/parameterNamesInTypeParameterList.ts(20,22): error TS2304: Cannot find name 'a'. +tests/cases/compiler/parameterNamesInTypeParameterList.ts(1,30): error TS2552: Cannot find name 'a'. Did you mean 'A'? +tests/cases/compiler/parameterNamesInTypeParameterList.ts(5,30): error TS2552: Cannot find name 'a'. Did you mean 'A'? +tests/cases/compiler/parameterNamesInTypeParameterList.ts(9,30): error TS2552: Cannot find name 'a'. Did you mean 'A'? +tests/cases/compiler/parameterNamesInTypeParameterList.ts(14,22): error TS2552: Cannot find name 'a'. Did you mean 'A'? +tests/cases/compiler/parameterNamesInTypeParameterList.ts(17,22): error TS2552: Cannot find name 'a'. Did you mean 'A'? +tests/cases/compiler/parameterNamesInTypeParameterList.ts(20,22): error TS2552: Cannot find name 'a'. Did you mean 'A'? ==== tests/cases/compiler/parameterNamesInTypeParameterList.ts (6 errors) ==== function f0(a: T) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b; } function f1({a}: {a:T}) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b; } function f2([a]: T[]) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b; } class A { m0(a: T) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b } m1({a}: {a:T}) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b } m2([a]: T[]) { ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? a.b } } \ No newline at end of file diff --git a/tests/baselines/reference/parser10.1.1-8gs.errors.txt b/tests/baselines/reference/parser10.1.1-8gs.errors.txt index 84e45644e94..442b90fc85e 100644 --- a/tests/baselines/reference/parser10.1.1-8gs.errors.txt +++ b/tests/baselines/reference/parser10.1.1-8gs.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(16,7): error TS2304: Cannot find name 'NotEarlyError'. +tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(16,7): error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(17,5): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. @@ -20,7 +20,7 @@ tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(17,5): error TS12 "use strict"; throw NotEarlyError; ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'NotEarlyError'. +!!! error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? var public = 1; ~~~~~~ !!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode. diff --git a/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt b/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt index 2c721724b3e..143592f649a 100644 --- a/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt +++ b/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(16,15): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'number' is not a valid type argument because it is not a supertype of candidate 'false'. -tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error TS2304: Cannot find name 'runTestCase'. +tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error TS2552: Cannot find name 'runTestCase'. Did you mean 'testcase'? ==== tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts (2 errors) ==== @@ -33,5 +33,5 @@ tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error T } runTestCase(testcase); ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'runTestCase'. +!!! error TS2552: Cannot find name 'runTestCase'. Did you mean 'testcase'? \ No newline at end of file diff --git a/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.errors.txt b/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.errors.txt index 6af3f2843f6..6c2a0562a7c 100644 --- a/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.errors.txt +++ b/tests/baselines/reference/parserMemberAccessAfterPostfixExpression1.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPostfixExpression1.ts(1,1): error TS2304: Cannot find name 'a'. tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPostfixExpression1.ts(1,4): error TS1005: ';' expected. -tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPostfixExpression1.ts(1,5): error TS2304: Cannot find name 'toString'. +tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPostfixExpression1.ts(1,5): error TS2552: Cannot find name 'toString'. Did you mean 'String'? ==== tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPostfixExpression1.ts (3 errors) ==== @@ -10,4 +10,4 @@ tests/cases/conformance/parser/ecmascript5/Expressions/parserMemberAccessAfterPo ~ !!! error TS1005: ';' expected. ~~~~~~~~ -!!! error TS2304: Cannot find name 'toString'. \ No newline at end of file +!!! error TS2552: Cannot find name 'toString'. Did you mean 'String'? \ No newline at end of file diff --git a/tests/baselines/reference/parserRealSource10.errors.txt b/tests/baselines/reference/parserRealSource10.errors.txt index ae48cd79b51..c6ab397d7d7 100644 --- a/tests/baselines/reference/parserRealSource10.errors.txt +++ b/tests/baselines/reference/parserRealSource10.errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(127,33): error TS2449: Class 'TokenInfo' used before its declaration. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(127,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,36): error TS2304: Cannot find name 'string'. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,36): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(128,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,41): error TS2304: Cannot find name 'number'. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,41): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(129,47): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,35): error TS2304: Cannot find name 'boolean'. +tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,35): error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(130,42): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(179,54): error TS2304: Cannot find name 'ErrorRecoverySet'. tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(184,28): error TS2304: Cannot find name 'ErrorRecoverySet'. @@ -479,17 +479,17 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource10.ts(449,40): error !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. export var nodeTypeTable = new string[]; ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. export var nodeTypeToTokTable = new number[]; ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. export var noRegexTable = new boolean[]; ~~~~~~~ -!!! error TS2304: Cannot find name 'boolean'. +!!! error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index efae0f962fd..84264ee5512 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(13,22): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(14,24): error TS2304: Cannot find name 'ASTFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(14,24): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(17,38): error TS2304: Cannot find name 'CompilerDiagnostics'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(24,39): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(36,36): error TS2304: Cannot find name 'TypeFlow'. @@ -30,7 +30,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(103,22): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(108,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(119,31): error TS2304: Cannot find name 'PrintContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,17): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,37): error TS2304: Cannot find name 'ASTFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,37): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(137,17): error TS2304: Cannot find name 'nodeTypeTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(138,24): error TS2304: Cannot find name 'nodeTypeTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(141,30): error TS2304: Cannot find name 'NodeType'. @@ -46,7 +46,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(199,42): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(219,33): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(231,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(231,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(233,52): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(233,52): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(237,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(251,21): error TS2304: Cannot find name 'Symbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(268,19): error TS2304: Cannot find name 'NodeType'. @@ -85,35 +85,35 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(427,22): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(441,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(441,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(445,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(446,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(446,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(449,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(451,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(451,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(453,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(454,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(454,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(457,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(460,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(463,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(465,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(465,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(467,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(469,50): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(472,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(472,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(474,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(476,50): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(479,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(479,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(481,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(483,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(483,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(485,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(487,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(487,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(489,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(491,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(491,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(494,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(496,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(496,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(498,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(500,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(500,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(502,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(504,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(504,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(506,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(507,58): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(507,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(518,32): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(520,29): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(525,27): error TS2304: Cannot find name 'Signature'. @@ -174,26 +174,26 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(644,21): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(647,26): error TS2304: Cannot find name 'tokenTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(651,58): error TS2304: Cannot find name 'tokenTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(658,26): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(660,67): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(660,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(665,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(669,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(670,55): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(672,33): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(672,60): error TS2304: Cannot find name 'FncFlags'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(678,67): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(681,67): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(684,63): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(678,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(681,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(684,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(686,26): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(687,63): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(694,63): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(687,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(694,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(696,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(711,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(714,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(718,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(718,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(721,51): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(723,51): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(725,51): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(721,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(723,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(725,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(733,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(738,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(747,30): error TS2304: Cannot find name 'Emitter'. @@ -213,7 +213,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(837,30): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(837,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(838,24): error TS2304: Cannot find name 'ModuleType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(841,61): error TS2304: Cannot find name 'TypeSymbol'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(850,52): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(850,52): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(863,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(867,29): error TS1015: Parameter cannot have question mark and initializer. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(868,38): error TS2304: Cannot find name 'NodeType'. @@ -258,7 +258,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1024,47): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1032,36): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1033,29): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1034,28): error TS2304: Cannot find name 'BasicBlock'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1036,31): error TS2304: Cannot find name 'ControlFlowContext'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1036,31): error TS2552: Cannot find name 'ControlFlowContext'. Did you mean 'controlFlowPrefix'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1038,69): error TS2304: Cannot find name 'IAstWalker'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1043,26): error TS2304: Cannot find name 'getAstWalkerFactory'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1050,36): error TS2304: Cannot find name 'TypeFlow'. @@ -311,7 +311,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1164,47): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1164,97): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1172,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1172,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1176,60): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1176,60): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1187,32): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1195,27): error TS2304: Cannot find name 'ModuleFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1196,21): error TS2304: Cannot find name 'ModuleType'. @@ -343,7 +343,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1286,36): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1290,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1290,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1295,32): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1297,27): error TS2304: Cannot find name 'ASTFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1297,27): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1306,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1314,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1317,30): error TS2304: Cannot find name 'Emitter'. @@ -354,7 +354,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1339,26): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1348,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1351,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1351,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1362,67): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1362,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1374,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1375,37): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1388,36): error TS2304: Cannot find name 'TypeFlow'. @@ -370,7 +370,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1438,34): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1457,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1462,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1462,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1467,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1467,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1475,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1479,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1481,33): error TS2304: Cannot find name 'BasicBlock'. @@ -380,7 +380,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1490,39): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1515,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1518,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1518,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1528,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1528,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1535,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1539,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1541,33): error TS2304: Cannot find name 'BasicBlock'. @@ -389,7 +389,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1545,29): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1572,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1577,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1577,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1583,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1583,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1596,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1600,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1602,31): error TS2304: Cannot find name 'BasicBlock'. @@ -398,7 +398,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1615,39): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1651,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1654,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1654,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1660,63): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1660,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1670,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1675,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1682,19): error TS2304: Cannot find name 'NodeType'. @@ -416,8 +416,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1732,66): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1733,73): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1749,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1749,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1755,47): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1757,46): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1755,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1757,46): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1766,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1775,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1784,33): error TS2304: Cannot find name 'BasicBlock'. @@ -426,10 +426,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1811,19): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1816,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1816,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1822,43): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1823,55): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1827,65): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1831,47): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1833,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1823,55): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1827,65): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1831,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1833,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1841,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1845,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1850,33): error TS2304: Cannot find name 'BasicBlock'. @@ -443,13 +443,13 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1908,25): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1911,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1914,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1914,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1919,51): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1919,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1928,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1939,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1944,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1944,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1950,46): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1958,50): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1950,46): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1958,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1969,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1981,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1984,33): error TS2304: Cannot find name 'BasicBlock'. @@ -457,7 +457,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1985,35): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2014,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2017,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2017,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2022,51): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2022,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2033,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2042,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2043,33): error TS2304: Cannot find name 'BasicBlock'. @@ -466,21 +466,21 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2067,19): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2070,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2070,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2074,36): error TS2304: Cannot find name 'TypeFlow'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2077,28): error TS2304: Cannot find name 'getTypeLink'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2077,28): error TS2552: Cannot find name 'getTypeLink'. Did you mean 'typeLink'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2100,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2105,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2105,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2107,50): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2108,54): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2107,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2108,54): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2112,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2119,42): error TS2304: Cannot find name 'ControlFlowContext'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2120,36): error TS2304: Cannot find name 'BasicBlock'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2122,32): error TS2304: Cannot find name 'BasicBlock'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2120,36): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2122,32): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2145,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2153,50): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2154,52): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2153,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2154,52): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2159,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2161,32): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2164,37): error TS2304: Cannot find name 'BasicBlock'. @@ -489,7 +489,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2185,36): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2195,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2198,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2198,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2202,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2202,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2207,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2212,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2223,19): error TS2304: Cannot find name 'NodeType'. @@ -497,18 +497,18 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2225,40): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2229,32): error TS2304: Cannot find name 'SymbolScope'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2231,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2231,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2237,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2240,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2237,48): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2240,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2245,42): error TS2304: Cannot find name 'ControlFlowContext'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2248,36): error TS2304: Cannot find name 'BasicBlock'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2248,36): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'bodBlock'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2259,36): error TS2304: Cannot find name 'TypeFlow'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2263,33): error TS2304: Cannot find name 'ValueLocation'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2263,33): error TS2552: Cannot find name 'ValueLocation'. Did you mean 'LocationInfo'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2264,30): error TS2304: Cannot find name 'VariableSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2269,38): error TS2304: Cannot find name 'TypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2300,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2303,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2303,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2307,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2307,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2312,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2320,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2331,19): error TS2304: Cannot find name 'NodeType'. @@ -537,7 +537,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'Type'. public flags = ASTFlags.Writeable; ~~~~~~~~ -!!! error TS2304: Cannot find name 'ASTFlags'. +!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? // REVIEW: for diagnostic purposes public passCreated: number = CompilerDiagnostics.analysisPass; @@ -713,7 +713,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~ -!!! error TS2304: Cannot find name 'ASTFlags'. +!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? lab += " (Error)"; } context.writeLine(lab); @@ -848,7 +848,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascriptList(this, null, TokenID.Semicolon, startLine, false, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); } @@ -1139,7 +1139,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput("++"); break; case NodeType.LogNot: @@ -1148,14 +1148,14 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("!"); emitter.emitJavascript(this.operand, TokenID.Exclamation, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.DecPost: ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput("--"); break; case NodeType.ObjectLit: @@ -1174,7 +1174,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("~"); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Neg: ~~~~~~~~ @@ -1187,7 +1187,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand, TokenID.Minus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Pos: ~~~~~~~~ @@ -1200,7 +1200,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand, TokenID.Plus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.IncPre: ~~~~~~~~ @@ -1208,7 +1208,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("++"); emitter.emitJavascript(this.operand, TokenID.PlusPlus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.DecPre: ~~~~~~~~ @@ -1216,7 +1216,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("--"); emitter.emitJavascript(this.operand, TokenID.MinusMinus, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Throw: ~~~~~~~~ @@ -1224,7 +1224,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("throw "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(";"); break; case NodeType.Typeof: @@ -1233,7 +1233,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("typeof "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Delete: ~~~~~~~~ @@ -1241,7 +1241,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("delete "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Void: ~~~~~~~~ @@ -1249,14 +1249,14 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("void "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.TypeAssertion: ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; default: throw new Error("please implement in derived class"); @@ -1531,7 +1531,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (!emitter.tryEmitConstant(this)) { emitter.emitJavascript(this.operand1, TokenID.Dot, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput("."); emitter.emitJavascriptName(this.operand2, false); } @@ -1561,24 +1561,24 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand1, TokenID.Colon, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } else { emitter.emitJavascript(this.operand1, TokenID.Colon, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutputTrimmable(": "); } emitter.emitJavascript(this.operand2, TokenID.Comma, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Comma: ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand1, TokenID.Comma, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? if (emitter.emitState.inObjectLiteral) { emitter.writeLineToOutput(", "); } @@ -1587,7 +1587,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand2, TokenID.Comma, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? break; case NodeType.Is: ~~~~~~~~ @@ -1626,15 +1626,15 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.operand1, TokenID.Question, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(" ? "); emitter.emitJavascript(this.operand2, TokenID.Question, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(" : "); emitter.emitJavascript(this.operand3, TokenID.Question, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -1799,7 +1799,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.firstModAlias = this.firstAliasedModToString(); emitter.emitJavascript(this.alias, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? // the dynamic import case will insert the semi-colon automatically if (!this.isDynamicImport) { emitter.writeToOutput(";"); @@ -2075,7 +2075,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error var context = new ControlFlowContext(entry, exit); ~~~~~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ControlFlowContext'. +!!! error TS2552: Cannot find name 'ControlFlowContext'. Did you mean 'controlFlowPrefix'? var controlFlowPrefix = (ast: AST, parent: AST, walker: IAstWalker) => { ~~~~~~~~~~ @@ -2321,7 +2321,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascriptList(this.bod, null, TokenID.Semicolon, true, false, false, true, this.requiresInherits); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -2506,7 +2506,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error super(nodeType); this.flags |= ASTFlags.IsStatement; ~~~~~~~~ -!!! error TS2304: Cannot find name 'ASTFlags'. +!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? } public isLoop() { return false; } @@ -2593,7 +2593,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (this.statements) { emitter.emitJavascriptList(this.statements, null, TokenID.Semicolon, true, false, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } if (this.isStatementBlock) { emitter.indenter.decreaseIndent(); @@ -2730,7 +2730,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("while("); emitter.emitJavascript(this.cond, TokenID.While, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.emitJavascriptStatements(this.body, false, false); emitter.setInObjectLiteral(temp); @@ -2811,7 +2811,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput('('); emitter.emitJavascript(this.cond, TokenID.CloseParen, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.setInObjectLiteral(temp); emitter.recordSourceMappingEnd(this); @@ -2884,7 +2884,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("if("); emitter.emitJavascript(this.cond, TokenID.If, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascriptStatements(this.thenBod, true, false); @@ -2979,7 +2979,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("return "); emitter.emitJavascript(this.returnExpression, TokenID.Semicolon, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } else { emitter.writeToOutput("return;"); @@ -3110,11 +3110,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("for("); emitter.emitJavascript(this.lval, TokenID.For, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(" in "); emitter.emitJavascript(this.obj, TokenID.For, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascriptStatements(this.body, true, false); @@ -3198,23 +3198,23 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.init, TokenID.For, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } else { emitter.setInVarBlock((this.init).members.length); emitter.emitJavascriptList(this.init, null, TokenID.For, false, false, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } } emitter.writeToOutput("; "); emitter.emitJavascript(this.cond, TokenID.For, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput("; "); emitter.emitJavascript(this.incr, TokenID.For, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.emitJavascriptStatements(this.body, true, false); emitter.setInObjectLiteral(temp); @@ -3328,7 +3328,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (this.expr) { emitter.emitJavascript(this.expr, TokenID.With, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } emitter.writeToOutput(")"); @@ -3369,7 +3369,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("switch("); emitter.emitJavascript(this.val, TokenID.Identifier, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.writeLineToOutput(" {"); @@ -3379,7 +3379,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error var caseExpr = this.caseList.members[i]; emitter.emitJavascript(caseExpr, TokenID.Case, true); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeLineToOutput(""); } emitter.indenter.decreaseIndent(); @@ -3459,7 +3459,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("case "); emitter.emitJavascript(this.expr, TokenID.Identifier, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? } else { emitter.writeToOutput("default"); @@ -3532,7 +3532,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error typeFlow.inTypeRefTypeCheck = true; var typeLink = getTypeLink(this, typeFlow.checker, true); ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'getTypeLink'. +!!! error TS2552: Cannot find name 'getTypeLink'. Did you mean 'typeLink'? typeFlow.checker.resolveTypeLink(typeFlow.scope, typeLink, false); if (this.term) { @@ -3570,10 +3570,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.tryNode, TokenID.Try, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.emitJavascript(this.finallyNode, TokenID.Finally, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); } @@ -3591,11 +3591,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'ControlFlowContext'. var afterFinally = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'BasicBlock'. +!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? context.walk(this.tryNode, this); var finBlock = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'BasicBlock'. +!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? if (context.current) { context.current.addSuccessor(finBlock); } @@ -3634,10 +3634,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.tryNode, TokenID.Try, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.emitJavascript(this.catchNode, TokenID.Catch, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3703,7 +3703,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("try "); emitter.emitJavascript(this.body, TokenID.Try, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3754,12 +3754,12 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("catch ("); emitter.emitJavascript(this.param, TokenID.OpenParen, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascript(this.body, TokenID.Catch, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3771,7 +3771,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error context.addContent(this.param); var bodBlock = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'BasicBlock'. +!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'bodBlock'? context.current.addSuccessor(bodBlock); context.current = bodBlock; } @@ -3790,7 +3790,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error this.param = typeFlow.typeCheck(this.param); var exceptVar = new ValueLocation(); ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ValueLocation'. +!!! error TS2552: Cannot find name 'ValueLocation'. Did you mean 'LocationInfo'? var varSym = new VariableSymbol((this.param).id.text, ~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'VariableSymbol'. @@ -3846,7 +3846,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("finally"); emitter.emitJavascript(this.body, TokenID.Finally, false); ~~~~~~~ -!!! error TS2304: Cannot find name 'TokenID'. +!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } diff --git a/tests/baselines/reference/parserRealSource13.errors.txt b/tests/baselines/reference/parserRealSource13.errors.txt index 6ddc41ed610..ddf67bb6dad 100644 --- a/tests/baselines/reference/parserRealSource13.errors.txt +++ b/tests/baselines/reference/parserRealSource13.errors.txt @@ -113,7 +113,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(123,26): error tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(123,39): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(128,33): error TS2339: Property 'getAstWalkerFactory' does not exist on type 'typeof TypeScript'. tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(132,51): error TS2304: Cannot find name 'AST'. -tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(135,36): error TS2304: Cannot find name 'NodeType'. +tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(135,36): error TS2552: Cannot find name 'NodeType'. Did you mean 'nodeType'? ==== tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts (116 errors) ==== @@ -483,7 +483,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource13.ts(135,36): error var nodeType = ast.nodeType; var callbackString = (NodeType)._map[nodeType] + "Callback"; ~~~~~~~~ -!!! error TS2304: Cannot find name 'NodeType'. +!!! error TS2552: Cannot find name 'NodeType'. Did you mean 'nodeType'? if (callback[callbackString]) { return callback[callbackString](pre, ast); } diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index a3635dabc48..cbe09f8e708 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -1,9 +1,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(12,38): error TS2304: Cannot find name 'ASTList'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(12,62): error TS2304: Cannot find name 'TypeLink'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,37): error TS2304: Cannot find name 'TypeLink'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,37): error TS2552: Cannot find name 'TypeLink'. Did you mean 'typeLink'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(16,45): error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(21,36): error TS2304: Cannot find name 'TypeLink'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(21,36): error TS2552: Cannot find name 'TypeLink'. Did you mean 'typeLink'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(29,29): error TS2304: Cannot find name 'Type'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(29,45): error TS2304: Cannot find name 'TypeDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,43): error TS2304: Cannot find name 'Type'. @@ -11,11 +11,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,54): error TS tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(34,68): error TS2304: Cannot find name 'TypeCollectionContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(35,25): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(36,30): error TS2304: Cannot find name 'TypeLink'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(41,17): error TS2304: Cannot find name 'FieldSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(41,17): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(43,31): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(43,54): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(49,58): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(50,29): error TS2304: Cannot find name 'Signature'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(50,29): error TS2552: Cannot find name 'Signature'. Did you mean 'signature'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(51,36): error TS2304: Cannot find name 'TypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(55,30): error TS2304: Cannot find name 'SignatureGroup'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(59,66): error TS2304: Cannot find name 'Type'. @@ -46,18 +46,18 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(154,27): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(155,26): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(155,55): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(165,28): error TS2304: Cannot find name 'ModuleType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(169,26): error TS2304: Cannot find name 'TypeSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(169,26): error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(186,48): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(186,61): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(186,75): error TS2304: Cannot find name 'TypeCollectionContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(189,25): error TS2304: Cannot find name 'ModuleDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(189,46): error TS2304: Cannot find name 'ModuleDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,25): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,54): error TS2304: Cannot find name 'ModuleFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,54): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,22): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,51): error TS2304: Cannot find name 'ModuleFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,51): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,26): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,55): error TS2304: Cannot find name 'ModuleFlags'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,55): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(195,25): error TS2304: Cannot find name 'Identifier'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(197,25): error TS2304: Cannot find name 'isQuoted'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(200,25): error TS2304: Cannot find name 'TypeSymbol'. @@ -71,7 +71,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,48): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,66): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,90): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,113): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(207,31): error TS2304: Cannot find name 'ModuleType'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(207,31): error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(209,42): error TS2304: Cannot find name 'TypeFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(211,39): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(211,57): error TS2304: Cannot find name 'DualStringHashTable'. @@ -81,8 +81,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(212,46): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(212,64): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(212,88): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(212,111): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(216,30): error TS2304: Cannot find name 'TypeSymbol'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(231,72): error TS2304: Cannot find name 'NodeType'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(216,30): error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(231,72): error TS2552: Cannot find name 'NodeType'. Did you mean 'modType'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(234,27): error TS2304: Cannot find name 'TypeSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(238,80): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(239,37): error TS2304: Cannot find name 'ScopedMembers'. @@ -100,7 +100,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(250,82): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,38): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,56): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,107): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(253,27): error TS2304: Cannot find name 'ModuleType'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(253,27): error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(255,38): error TS2304: Cannot find name 'TypeFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(272,33): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(276,33): error TS2304: Cannot find name 'SymbolFlags'. @@ -142,7 +142,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(349,47): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(349,65): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(349,89): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(349,112): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(350,30): error TS2304: Cannot find name 'TypeSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(350,30): error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(360,37): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(364,37): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(368,37): error TS2304: Cannot find name 'SymbolFlags'. @@ -196,7 +196,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(476,57): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(477,29): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,29): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,55): error TS2304: Cannot find name 'VarFlags'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2304: Cannot find name 'FieldSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,34): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,60): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(492,30): error TS2304: Cannot find name 'getTypeLink'. @@ -218,7 +218,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,26): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,52): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(518,22): error TS2304: Cannot find name 'FieldSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(531,29): error TS2304: Cannot find name 'ValueLocation'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2304: Cannot find name 'FieldSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,53): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,75): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(539,38): error TS2304: Cannot find name 'SymbolFlags'. @@ -327,7 +327,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T if (baseTypeLinks == null) { baseTypeLinks = new TypeLink[]; ~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeLink'. +!!! error TS2552: Cannot find name 'TypeLink'. Did you mean 'typeLink'? ~~ !!! error TS1150: 'new T[]' cannot be used to create an array. Use 'new Array()' instead. } @@ -336,7 +336,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var name = baseExpr; var typeLink = new TypeLink(); ~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeLink'. +!!! error TS2552: Cannot find name 'TypeLink'. Did you mean 'typeLink'? typeLink.ast = name; baseTypeLinks[baseTypeLinks.length] = typeLink; } @@ -372,7 +372,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol("prototype", ast.minChar, ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'FieldSymbol'. +!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? context.checker.locationInfo.unitIndex, true, field); fieldSymbol.flags |= (SymbolFlags.Property | SymbolFlags.BuiltIn); ~~~~~~~~~~~ @@ -389,7 +389,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T !!! error TS2304: Cannot find name 'Type'. var signature = new Signature(); ~~~~~~~~~ -!!! error TS2304: Cannot find name 'Signature'. +!!! error TS2552: Cannot find name 'Signature'. Did you mean 'signature'? signature.returnType = new TypeLink(); ~~~~~~~~ !!! error TS2304: Cannot find name 'TypeLink'. @@ -570,7 +570,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T typeSymbol = new TypeSymbol(importDecl.id.text, importDecl.minChar, ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeSymbol'. +!!! error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? context.checker.locationInfo.unitIndex, modType); typeSymbol.aliasLink = importDecl; @@ -606,18 +606,18 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ModuleFlags'. +!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? var isEnum = hasFlag(moduleDecl.modFlags, ModuleFlags.IsEnum); ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ModuleFlags'. +!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? var isGlobal = context.scopeChain.container == context.checker.gloMod; var isExported = hasFlag(moduleDecl.modFlags, ModuleFlags.Exported); ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ModuleFlags'. +!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? var modName = (moduleDecl.name).text; ~~~~~~~~~~ !!! error TS2304: Cannot find name 'Identifier'. @@ -658,7 +658,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T !!! error TS2304: Cannot find name 'StringHashTable'. modType = new ModuleType(enclosedTypes, ambientEnclosedTypes); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ModuleType'. +!!! error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? if (isEnum) { modType.typeFlags |= TypeFlags.IsEnum; ~~~~~~~~~ @@ -687,7 +687,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T typeSymbol = new TypeSymbol(modName, moduleDecl.minChar, ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeSymbol'. +!!! error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? context.checker.locationInfo.unitIndex, modType); if (context.scopeChain.moduleDecl) { @@ -704,7 +704,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T else { if (symbol && symbol.declAST && symbol.declAST.nodeType != NodeType.ModuleDeclaration) { ~~~~~~~~ -!!! error TS2304: Cannot find name 'NodeType'. +!!! error TS2552: Cannot find name 'NodeType'. Did you mean 'modType'? context.checker.errorReporter.simpleError(moduleDecl, "Conflicting symbol name for module '" + modName + "'"); } typeSymbol = symbol; @@ -762,7 +762,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T modType = new ModuleType(enclosedTypes, ambientEnclosedTypes); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ModuleType'. +!!! error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? if (isEnum) { modType.typeFlags |= TypeFlags.IsEnum; ~~~~~~~~~ @@ -943,7 +943,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T !!! error TS2304: Cannot find name 'StringHashTable'. typeSymbol = new TypeSymbol(className, classDecl.minChar, ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeSymbol'. +!!! error TS2552: Cannot find name 'TypeSymbol'. Did you mean 'typeSymbol'? context.checker.locationInfo.unitIndex, classType); typeSymbol.declAST = classDecl; typeSymbol.instanceType = instanceType; @@ -1181,7 +1181,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(argDecl.id.text, argDecl.minChar, ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'FieldSymbol'. +!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? context.checker.locationInfo.unitIndex, !hasFlag(argDecl.varFlags, VarFlags.Readonly), ~~~~~~~ @@ -1278,7 +1278,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(varDecl.id.text, varDecl.minChar, ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'FieldSymbol'. +!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? context.checker.locationInfo.unitIndex, (varDecl.varFlags & VarFlags.Readonly) == VarFlags.None, ~~~~~~~~ diff --git a/tests/baselines/reference/parserRealSource8.errors.txt b/tests/baselines/reference/parserRealSource8.errors.txt index 6249d3fd991..d4d26e5489f 100644 --- a/tests/baselines/reference/parserRealSource8.errors.txt +++ b/tests/baselines/reference/parserRealSource8.errors.txt @@ -47,7 +47,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(160,52): error T tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(160,76): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(160,99): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(162,28): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(163,30): error TS2304: Cannot find name 'WithSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(163,30): error TS2552: Cannot find name 'WithSymbol'. Did you mean 'withSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(170,40): error TS2339: Property 'SymbolScopeBuilder' does not exist on type 'typeof TypeScript'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(176,50): error TS2304: Cannot find name 'AST'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(177,25): error TS2304: Cannot find name 'FuncDecl'. @@ -74,19 +74,19 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(284,38): error T tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(286,55): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(292,43): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(309,29): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,31): error TS2304: Cannot find name 'ScopedMembers'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,31): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,49): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,84): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(311,36): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,38): error TS2304: Cannot find name 'ScopedMembers'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,38): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,56): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,98): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(313,35): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,37): error TS2304: Cannot find name 'ScopedMembers'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,37): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,55): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,96): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(315,42): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,44): error TS2304: Cannot find name 'ScopedMembers'. +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,44): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,62): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,110): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(321,26): error TS2304: Cannot find name 'SymbolScopeBuilder'. @@ -397,7 +397,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'Type'. var withSymbol = new WithSymbol(withStmt.minChar, context.typeFlow.checker.locationInfo.unitIndex, withType); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'WithSymbol'. +!!! error TS2552: Cannot find name 'WithSymbol'. Did you mean 'withSymbol'? withType.members = members; withType.ambientMembers = ambientMembers; withType.symbol = withSymbol; @@ -598,7 +598,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var funcMembers = new ScopedMembers(new DualStringHashTable(funcTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ScopedMembers'. +!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -608,7 +608,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var ambientFuncMembers = new ScopedMembers(new DualStringHashTable(ambientFuncTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ScopedMembers'. +!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -618,7 +618,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var funcStaticMembers = new ScopedMembers(new DualStringHashTable(funcStaticTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ScopedMembers'. +!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -628,7 +628,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var ambientFuncStaticMembers = new ScopedMembers(new DualStringHashTable(ambientFuncStaticTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'ScopedMembers'. +!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt index ab0c1dc4d2e..cf1bd1fd2e2 100644 --- a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,2): error TS2304: Cannot find name 'notregexp'. +tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,2): error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,12): error TS2304: Cannot find name 'a'. @@ -6,6 +6,6 @@ tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpre 1 /notregexp/a.foo(); ~~~~~~~~~ -!!! error TS2304: Cannot find name 'notregexp'. +!!! error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? ~ !!! error TS2304: Cannot find name 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt index eac54ef0fe4..cfe5b118ee5 100644 --- a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,6): error TS2304: Cannot find name 'notregexp'. +tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,6): error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,16): error TS2304: Cannot find name 'a'. ==== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts (2 errors) ==== (1) /notregexp/a.foo(); ~~~~~~~~~ -!!! error TS2304: Cannot find name 'notregexp'. +!!! error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? ~ !!! error TS2304: Cannot find name 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt b/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt index c86756b4ab1..3d35062bfc2 100644 --- a/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt +++ b/tests/baselines/reference/parserS7.2_A1.5_T2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(14,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(14,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts (2 errors) ==== @@ -18,7 +18,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS if (x !== 1) { $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } //CHECK#2 @@ -26,7 +26,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.2_A1.5_T2.ts(20,3): error TS if (x !== 1) { $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } diff --git a/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt b/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt index e999066aa41..d4131cc799d 100644 --- a/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt +++ b/tests/baselines/reference/parserS7.3_A1.1_T2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/parserS7.3_A1.1_T2.ts(17,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.3_A1.1_T2.ts(17,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/parser/ecmascript5/parserS7.3_A1.1_T2.ts (1 errors) ==== @@ -20,7 +20,7 @@ tests/cases/conformance/parser/ecmascript5/parserS7.3_A1.1_T2.ts(17,3): error TS if (x !== 1) { $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } \ No newline at end of file diff --git a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt index 153fb96ddac..c63ee2056b7 100644 --- a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt @@ -1,36 +1,36 @@ -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(14,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(18,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(22,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(26,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(30,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(34,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(38,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(42,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(46,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(50,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(54,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(58,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(62,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(66,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(70,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(74,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(78,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(82,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(86,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(90,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(94,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(98,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(102,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(106,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(110,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(114,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(118,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(122,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(126,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(130,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(134,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(138,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(14,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(18,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(22,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(26,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(30,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(34,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(38,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(42,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(46,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(50,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(54,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(58,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(62,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(66,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(70,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(74,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(78,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(82,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(86,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(90,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(94,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(98,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(102,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(106,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(110,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(114,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(118,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(122,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(126,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(130,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(134,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(138,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts (33 errors) ==== @@ -49,199 +49,199 @@ tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error T if (А !== 1) { $ERROR('#А'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0411 = 1; if (Б !== 1) { $ERROR('#Б'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0412 = 1; if (В !== 1) { $ERROR('#В'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0413 = 1; if (Г !== 1) { $ERROR('#Г'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0414 = 1; if (Д !== 1) { $ERROR('#Д'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0415 = 1; if (Е !== 1) { $ERROR('#Е'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0416 = 1; if (Ж !== 1) { $ERROR('#Ж'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0417 = 1; if (З !== 1) { $ERROR('#З'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0418 = 1; if (И !== 1) { $ERROR('#И'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0419 = 1; if (Й !== 1) { $ERROR('#Й'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041A = 1; if (К !== 1) { $ERROR('#К'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041B = 1; if (Л !== 1) { $ERROR('#Л'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041C = 1; if (М !== 1) { $ERROR('#М'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041D = 1; if (Н !== 1) { $ERROR('#Н'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041E = 1; if (О !== 1) { $ERROR('#О'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041F = 1; if (П !== 1) { $ERROR('#П'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0420 = 1; if (Р !== 1) { $ERROR('#Р'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0421 = 1; if (С !== 1) { $ERROR('#С'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0422 = 1; if (Т !== 1) { $ERROR('#Т'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0423 = 1; if (У !== 1) { $ERROR('#У'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0424 = 1; if (Ф !== 1) { $ERROR('#Ф'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0425 = 1; if (Х !== 1) { $ERROR('#Х'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0426 = 1; if (Ц !== 1) { $ERROR('#Ц'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0427 = 1; if (Ч !== 1) { $ERROR('#Ч'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0428 = 1; if (Ш !== 1) { $ERROR('#Ш'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0429 = 1; if (Щ !== 1) { $ERROR('#Щ'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042A = 1; if (Ъ !== 1) { $ERROR('#Ъ'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042B = 1; if (Ы !== 1) { $ERROR('#Ы'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042C = 1; if (Ь !== 1) { $ERROR('#Ь'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042D = 1; if (Э !== 1) { $ERROR('#Э'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042E = 1; if (Ю !== 1) { $ERROR('#Ю'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042F = 1; if (Я !== 1) { $ERROR('#Я'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0401 = 1; if (Ё !== 1) { $ERROR('#Ё'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens16.errors.txt b/tests/baselines/reference/parserSkippedTokens16.errors.txt index fc3565e9786..3f0321ed00c 100644 --- a/tests/baselines/reference/parserSkippedTokens16.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens16.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts(1,1): error TS2304: Cannot find name 'foo'. +tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts(1,1): error TS2552: Cannot find name 'foo'. Did you mean 'Foo'? tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts(1,6): error TS1005: ';' expected. tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts(1,8): error TS2304: Cannot find name 'Bar'. tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts(1,12): error TS1005: ';' expected. @@ -11,7 +11,7 @@ tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.t ==== tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens16.ts (8 errors) ==== foo(): Bar { } ~~~ -!!! error TS2304: Cannot find name 'foo'. +!!! error TS2552: Cannot find name 'foo'. Did you mean 'Foo'? ~ !!! error TS1005: ';' expected. ~~~ diff --git a/tests/baselines/reference/parserSymbolIndexer5.errors.txt b/tests/baselines/reference/parserSymbolIndexer5.errors.txt index a8c19338e01..7906d08912c 100644 --- a/tests/baselines/reference/parserSymbolIndexer5.errors.txt +++ b/tests/baselines/reference/parserSymbolIndexer5.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,6): error TS2304: Cannot find name 's'. tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,7): error TS1005: ']' expected. -tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,9): error TS2304: Cannot find name 'symbol'. +tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,9): error TS2552: Cannot find name 'symbol'. Did you mean 'Symbol'? tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,15): error TS1005: ',' expected. tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(2,16): error TS1136: Property assignment expected. tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(3,1): error TS1005: ':' expected. @@ -14,7 +14,7 @@ tests/cases/conformance/parser/ecmascript6/Symbols/parserSymbolIndexer5.ts(3,1): ~ !!! error TS1005: ']' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'symbol'. +!!! error TS2552: Cannot find name 'symbol'. Did you mean 'Symbol'? ~ !!! error TS1005: ',' expected. ~ diff --git a/tests/baselines/reference/parserUnicode1.errors.txt b/tests/baselines/reference/parserUnicode1.errors.txt index 6f56522c05c..d04e136a534 100644 --- a/tests/baselines/reference/parserUnicode1.errors.txt +++ b/tests/baselines/reference/parserUnicode1.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(6,5): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(10,5): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(6,5): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(10,5): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts (2 errors) ==== @@ -10,12 +10,12 @@ tests/cases/conformance/parser/ecmascript5/parserUnicode1.ts(10,5): error TS2304 $ERROR('#6.1: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } } catch (e) { $ERROR('#6.2: var \\u0078x = 1; xx === 6. Actual: ' + (xx)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } \ No newline at end of file diff --git a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt index a2be22d5ee0..dde7576bfc4 100644 --- a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt +++ b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt @@ -4,12 +4,12 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,9): error TS2304: Cannot find name 'assign'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,16): error TS2304: Cannot find name 'context'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,23): error TS1005: ',' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,25): error TS2304: Cannot find name 'any'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,30): error TS2304: Cannot find name 'value'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,25): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,30): error TS2552: Cannot find name 'value'. Did you mean 'eval'? tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,35): error TS1005: ',' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,37): error TS2304: Cannot find name 'any'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,37): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,41): error TS1005: ';' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,43): error TS2304: Cannot find name 'any'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,43): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(8,23): error TS2304: Cannot find name 'IPromise'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(8,45): error TS2304: Cannot find name 'IPromise'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(8,54): error TS1005: '>' expected. @@ -33,17 +33,17 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener ~ !!! error TS1005: ',' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ~~~~~ -!!! error TS2304: Cannot find name 'value'. +!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? ~ !!! error TS1005: ',' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ~ !!! error TS1005: ';' expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? } interface IQService { diff --git a/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt index 8d9acd6fb57..db5bd15b155 100644 --- a/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt +++ b/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts(1,15): error TS2304: Cannot find name 'something'. +tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? ==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2304: Cannot find name 'something'. +!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? break; } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt b/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt index 5d87d3e3c71..4036de0d2a2 100644 --- a/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt +++ b/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts(1,15): error TS2304: Cannot find name 'something'. +tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? ==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2304: Cannot find name 'something'. +!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? continue; } \ No newline at end of file diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt index d3d0c4056a1..fc8d1c5a322 100644 --- a/tests/baselines/reference/parserharness.errors.txt +++ b/tests/baselines/reference/parserharness.errors.txt @@ -16,64 +16,64 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(691,50): e tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(716,47): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(721,62): error TS2304: Cannot find name 'ITextWriter'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(724,29): error TS2304: Cannot find name 'ITextWriter'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(754,53): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(754,53): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(764,56): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(765,37): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(767,47): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(776,13): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(776,42): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(765,37): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(767,47): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(776,13): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(776,42): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(781,23): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(794,49): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(795,49): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,53): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,89): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(794,49): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(795,49): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,53): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,89): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,115): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,145): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,145): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(999,40): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1041,43): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1044,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1045,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1046,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1047,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1048,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1049,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1050,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1051,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1052,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1053,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1055,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1058,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1044,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1045,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1046,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1047,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1048,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1049,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1050,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1051,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1052,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1053,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1055,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1058,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1059,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1061,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1064,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1061,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1064,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1065,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1067,26): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1070,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1067,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1070,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1071,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1073,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1073,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1074,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1076,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1076,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1077,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1079,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1079,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1080,35): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1080,74): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1107,173): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1176,132): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1193,29): error TS2304: Cannot find name 'WScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1193,29): error TS2552: Cannot find name 'WScript'. Did you mean 'scripts'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1256,126): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1257,25): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1263,31): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1280,45): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1280,45): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1286,124): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1286,209): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1294,142): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1294,227): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1302,43): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1304,39): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1307,38): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1311,45): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1321,21): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1302,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1304,39): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1307,38): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1311,45): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1321,21): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1340,38): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1344,165): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1345,26): error TS2503: Cannot find namespace 'TypeScript'. @@ -85,21 +85,21 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1461,23): tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1466,36): error TS2304: Cannot find name 'optionRegex'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1484,21): error TS2304: Cannot find name 'optionRegex'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1548,57): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1571,32): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1571,32): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1582,59): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1591,24): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1600,24): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1591,24): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1600,24): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1604,42): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1605,21): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1705,38): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1706,26): error TS2304: Cannot find name 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1713,62): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1713,87): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1714,30): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1724,34): error TS2304: Cannot find name 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1739,20): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1714,30): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1724,34): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1739,20): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1746,80): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1750,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1750,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1758,84): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1769,51): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1784,39): error TS2503: Cannot find namespace 'Services'. @@ -107,7 +107,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1784,61): tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1785,25): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1787,38): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1787,68): error TS2503: Cannot find namespace 'Services'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): error TS2304: Cannot find name 'Diff'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): error TS2552: Cannot find name 'Diff'. Did you mean 'diff'? ==== tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts (110 errors) ==== @@ -902,7 +902,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var libFolder: string = global['WScript'] ? TypeScript.filePath(global['WScript'].ScriptFullName) : (__dirname + '/'); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? export var libText = IO ? IO.readFile(libFolder + "lib.d.ts") : ''; var stdout = new EmitterIOHost(); @@ -917,11 +917,11 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): !!! error TS2503: Cannot find namespace 'TypeScript'. var compiler = c || new TypeScript.TypeScriptCompiler(stderr); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? compiler.parser.errorRecovery = true; compiler.settings.codeGenTarget = TypeScript.CodeGenTarget.ES5; ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? compiler.settings.controlFlow = true; compiler.settings.controlFlowUseDef = true; if (Harness.usePull) { @@ -932,9 +932,9 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): compiler.parseEmitOption(stdout); TypeScript.moduleGenTarget = TypeScript.ModuleGenTarget.Synchronous; ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? compiler.addUnit(Harness.Compiler.libText, "lib.d.ts", true); return compiler; } @@ -956,10 +956,10 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): // requires unit to already exist in the compiler compiler.pullUpdateUnit(new TypeScript.StringSourceText(""), filename, true); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? compiler.pullUpdateUnit(new TypeScript.StringSourceText(code), filename, true); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } } else { @@ -1153,16 +1153,16 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var script = compiler.scripts.members[m]; var enclosingScopeContext = TypeScript.findEnclosingScopeAt(new TypeScript.NullLogger(), script, new TypeScript.StringSourceText(code), 0, false); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? var entries = new TypeScript.ScopeTraversal(compiler).getScopeEntries(enclosingScopeContext); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? for (var i = 0; i < entries.length; i++) { if (entries[i].name === targetIdentifier) { @@ -1224,88 +1224,88 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): switch (ast.nodeType) { case TypeScript.NodeType.Name: // Type Name? ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.Null: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.List: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.Empty: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.EmptyExpr: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.Asg: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.True: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.False: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.ArrayLit: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? case TypeScript.NodeType.TypeRef: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? break; case TypeScript.NodeType.Super: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).text; break; case TypeScript.NodeType.Regex: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).text; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.QString: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).text; break; case TypeScript.NodeType.NumberLit: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).text; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.Return: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? //name = (tyInfo.ast).returnExpression.actualText; // why is this complaining? break; case TypeScript.NodeType.InterfaceDeclaration: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.ModuleDeclaration: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.ClassDeclaration: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.FuncDecl: ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? name = !(ast).name ? "" : (ast).name.actualText; // name == null for lambdas ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. @@ -1429,7 +1429,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): else { WScript.Echo("non-match on: " + errorLines[i]); ~~~~~~~ -!!! error TS2304: Cannot find name 'WScript'. +!!! error TS2552: Cannot find name 'WScript'. Did you mean 'scripts'? } } } @@ -1524,7 +1524,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): if (Harness.usePull) { compiler.pullUpdateUnit(new TypeScript.StringSourceText(code), unitName, setRecovery); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } else { compiler.updateUnit(code, unitName, setRecovery); } @@ -1556,22 +1556,22 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var oldCompilerSettings = new TypeScript.CompilationSettings(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? clone(compiler.settings, oldCompilerSettings); var oldEmitSettings = new TypeScript.EmitOptions(compiler.settings); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? clone(compiler.emitSettings, oldEmitSettings); var oldModuleGenTarget = TypeScript.moduleGenTarget; ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? if (settingsCallback) { settingsCallback(compiler.settings); compiler.emitSettings = new TypeScript.EmitOptions(compiler.settings); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } try { compileString(code, filename, callback, context, references); @@ -1583,7 +1583,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): compiler.emitSettings = oldEmitSettings; TypeScript.moduleGenTarget = oldModuleGenTarget; ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } } } @@ -1857,7 +1857,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): length: this.content.length, editRange: new TypeScript.ScriptEditRange(minChar, limChar, (limChar - minChar) + newText.length) ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? }); if (this.editRanges.length > this.maxScriptVersions) { @@ -1881,7 +1881,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): // Too far away from what we know return TypeScript.ScriptEditRange.unknown(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } var entries = this.editRanges.slice(initialEditRangeIndex); @@ -1892,7 +1892,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): return new TypeScript.ScriptEditRange(minDistFromStart, entries[0].length - minDistFromEnd, aggDelta); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } } @@ -2020,7 +2020,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): !!! error TS2503: Cannot find namespace 'TypeScript'. var parser = new TypeScript.Parser(); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? parser.setErrorRecovery(null); parser.errorCallback = (a, b, c, d) => { }; @@ -2032,7 +2032,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): public parseFile(fileName: string) { var sourceText = new TypeScript.StringSourceText(IO.readFile(fileName)) ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? return this.parseSourceText(fileName, sourceText); } @@ -2049,7 +2049,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): return TypeScript.getPositionFromZeroBasedLineColumn(script, line - 1, col - 1); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? } /** @@ -2064,7 +2064,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var result = TypeScript.getZeroBasedLineColumnFromPosition(script, position); ~~~~~~~~~~ -!!! error TS2304: Cannot find name 'TypeScript'. +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? assert.is(result.line >= 0); assert.is(result.col >= 0); @@ -2360,7 +2360,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): // Append diff to the report var diff = new Diff.StringDiff(expected, actual); ~~~~ -!!! error TS2304: Cannot find name 'Diff'. +!!! error TS2552: Cannot find name 'Diff'. Did you mean 'diff'? var header = '

' + descriptionForDescribe + '

'; header += '

Left file: ' + actualFilename + '; Right file: ' + refFilename + '

'; var trailer = '
'; diff --git a/tests/baselines/reference/parserindenter.errors.txt b/tests/baselines/reference/parserindenter.errors.txt index 2f51281e7aa..997b56b7db9 100644 --- a/tests/baselines/reference/parserindenter.errors.txt +++ b/tests/baselines/reference/parserindenter.errors.txt @@ -57,7 +57,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(265,91): tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(266,34): error TS2304: Cannot find name 'IndentationInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(274,53): error TS2304: Cannot find name 'AuthorParseNodeKind'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(278,50): error TS2304: Cannot find name 'Span'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(279,28): error TS2304: Cannot find name 'ParseTree'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(279,28): error TS2552: Cannot find name 'ParseTree'. Did you mean 'parseInt'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,60): error TS2304: Cannot find name 'TokenSpan'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,77): error TS2304: Cannot find name 'ParseNode'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,89): error TS2304: Cannot find name 'IndentationInfo'. @@ -527,7 +527,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(736,38): !!! error TS2304: Cannot find name 'Span'. node = ParseTree.FindCommonParentNode(semiColonStartSpan, semiColonStartSpan, node); ~~~~~~~~~ -!!! error TS2304: Cannot find name 'ParseTree'. +!!! error TS2552: Cannot find name 'ParseTree'. Did you mean 'parseInt'? indentationInfo = node.GetEffectiveChildrenIndentation(this); return indentationInfo; } diff --git a/tests/baselines/reference/primitiveTypeAssignment.errors.txt b/tests/baselines/reference/primitiveTypeAssignment.errors.txt index 3985a9acdc5..4048a00150f 100644 --- a/tests/baselines/reference/primitiveTypeAssignment.errors.txt +++ b/tests/baselines/reference/primitiveTypeAssignment.errors.txt @@ -1,18 +1,18 @@ -tests/cases/compiler/primitiveTypeAssignment.ts(1,9): error TS2304: Cannot find name 'any'. -tests/cases/compiler/primitiveTypeAssignment.ts(3,9): error TS2304: Cannot find name 'number'. -tests/cases/compiler/primitiveTypeAssignment.ts(5,9): error TS2304: Cannot find name 'boolean'. +tests/cases/compiler/primitiveTypeAssignment.ts(1,9): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/primitiveTypeAssignment.ts(3,9): error TS2552: Cannot find name 'number'. Did you mean 'Number'? +tests/cases/compiler/primitiveTypeAssignment.ts(5,9): error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? ==== tests/cases/compiler/primitiveTypeAssignment.ts (3 errors) ==== var x = any; ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? var y = number; ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? var z = boolean; ~~~~~~~ -!!! error TS2304: Cannot find name 'boolean'. +!!! error TS2552: Cannot find name 'boolean'. Did you mean 'Boolean'? \ No newline at end of file diff --git a/tests/baselines/reference/privateIndexer2.errors.txt b/tests/baselines/reference/privateIndexer2.errors.txt index 9f087b22379..a12da313ffa 100644 --- a/tests/baselines/reference/privateIndexer2.errors.txt +++ b/tests/baselines/reference/privateIndexer2.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,15): error TS1005: ']' expected. -tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,17): error TS2304: Cannot find name 'string'. +tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,17): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,23): error TS1005: ',' expected. tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,24): error TS1136: Property assignment expected. tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,32): error TS1005: ':' expected. @@ -13,7 +13,7 @@ tests/cases/conformance/classes/indexMemberDeclarations/privateIndexer2.ts(4,32) ~ !!! error TS1005: ']' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ',' expected. ~ diff --git a/tests/baselines/reference/propertyOrdering.errors.txt b/tests/baselines/reference/propertyOrdering.errors.txt index ded6ec01aff..f9f638f592d 100644 --- a/tests/baselines/reference/propertyOrdering.errors.txt +++ b/tests/baselines/reference/propertyOrdering.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/propertyOrdering.ts(6,23): error TS2304: Cannot find name 'store'. -tests/cases/compiler/propertyOrdering.ts(9,34): error TS2339: Property 'store' does not exist on type 'Foo'. +tests/cases/compiler/propertyOrdering.ts(9,34): error TS2551: Property 'store' does not exist on type 'Foo'. Did you mean '_store'? tests/cases/compiler/propertyOrdering.ts(16,25): error TS2339: Property '_store' does not exist on type 'Bar'. tests/cases/compiler/propertyOrdering.ts(20,14): error TS2339: Property '_store' does not exist on type 'Bar'. @@ -17,7 +17,7 @@ tests/cases/compiler/propertyOrdering.ts(20,14): error TS2339: Property '_store' public bar() { return this.store; } // should be an error ~~~~~ -!!! error TS2339: Property 'store' does not exist on type 'Foo'. +!!! error TS2551: Property 'store' does not exist on type 'Foo'. Did you mean '_store'? } diff --git a/tests/baselines/reference/propertySignatures.errors.txt b/tests/baselines/reference/propertySignatures.errors.txt index fd415334e74..60a393aef4d 100644 --- a/tests/baselines/reference/propertySignatures.errors.txt +++ b/tests/baselines/reference/propertySignatures.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/propertySignatures.ts(2,13): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/propertySignatures.ts(2,23): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/propertySignatures.ts(14,12): error TS2304: Cannot find name 'foo'. +tests/cases/compiler/propertySignatures.ts(14,12): error TS2552: Cannot find name 'foo'. Did you mean 'foo1'? ==== tests/cases/compiler/propertySignatures.ts (3 errors) ==== @@ -23,7 +23,7 @@ tests/cases/compiler/propertySignatures.ts(14,12): error TS2304: Cannot find nam var foo4: { (): void; }; var test = foo(); ~~~ -!!! error TS2304: Cannot find name 'foo'. +!!! error TS2552: Cannot find name 'foo'. Did you mean 'foo1'? // Should be OK var foo5: {();}; diff --git a/tests/baselines/reference/scanner10.1.1-8gs.errors.txt b/tests/baselines/reference/scanner10.1.1-8gs.errors.txt index 6e75f195c26..f8b0c121ee0 100644 --- a/tests/baselines/reference/scanner10.1.1-8gs.errors.txt +++ b/tests/baselines/reference/scanner10.1.1-8gs.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(16,7): error TS2304: Cannot find name 'NotEarlyError'. +tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(16,7): error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,1): error TS7027: Unreachable code detected. tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,5): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. @@ -21,7 +21,7 @@ tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,5): error TS "use strict"; throw NotEarlyError; ~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'NotEarlyError'. +!!! error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? var public = 1; ~~~ !!! error TS7027: Unreachable code detected. diff --git a/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt b/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt index 94200267e62..97d580c9b4b 100644 --- a/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt +++ b/tests/baselines/reference/scannerS7.2_A1.5_T2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(14,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(14,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts (2 errors) ==== @@ -18,7 +18,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error if (x !== 1) { $ERROR('#1: eval("\\u00A0var x\\u00A0= 1\\u00A0"); x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } //CHECK#2 @@ -26,7 +26,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.2_A1.5_T2.ts(20,3): error if (x !== 1) { $ERROR('#2:  var x = 1 ; x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } diff --git a/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt b/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt index 278e1d79621..186427f5de9 100644 --- a/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt +++ b/tests/baselines/reference/scannerS7.3_A1.1_T2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/scanner/ecmascript5/scannerS7.3_A1.1_T2.ts(17,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.3_A1.1_T2.ts(17,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/scanner/ecmascript5/scannerS7.3_A1.1_T2.ts (1 errors) ==== @@ -20,7 +20,7 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.3_A1.1_T2.ts(17,3): error if (x !== 1) { $ERROR('#1: var\\nx\\n=\\n1\\n; x === 1. Actual: ' + (x)); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } \ No newline at end of file diff --git a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt index 97925d67549..6d850d8567f 100644 --- a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt @@ -1,36 +1,36 @@ -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(14,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(18,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(22,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(26,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(30,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(34,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(38,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(42,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(46,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(50,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(54,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(58,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(62,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(66,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(70,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(74,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(78,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(82,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(86,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(90,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(94,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(98,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(102,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(106,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(110,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(114,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(118,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(122,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(126,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(130,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(134,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(138,3): error TS2304: Cannot find name '$ERROR'. -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(14,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(18,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(22,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(26,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(30,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(34,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(38,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(42,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(46,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(50,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(54,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(58,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(62,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(66,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(70,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(74,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(78,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(82,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(86,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(90,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(94,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(98,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(102,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(106,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(110,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(114,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(118,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(122,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(126,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(130,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(134,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(138,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? ==== tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts (33 errors) ==== @@ -49,199 +49,199 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error if (А !== 1) { $ERROR('#А'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0411 = 1; if (Б !== 1) { $ERROR('#Б'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0412 = 1; if (В !== 1) { $ERROR('#В'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0413 = 1; if (Г !== 1) { $ERROR('#Г'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0414 = 1; if (Д !== 1) { $ERROR('#Д'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0415 = 1; if (Е !== 1) { $ERROR('#Е'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0416 = 1; if (Ж !== 1) { $ERROR('#Ж'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0417 = 1; if (З !== 1) { $ERROR('#З'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0418 = 1; if (И !== 1) { $ERROR('#И'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0419 = 1; if (Й !== 1) { $ERROR('#Й'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041A = 1; if (К !== 1) { $ERROR('#К'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041B = 1; if (Л !== 1) { $ERROR('#Л'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041C = 1; if (М !== 1) { $ERROR('#М'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041D = 1; if (Н !== 1) { $ERROR('#Н'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041E = 1; if (О !== 1) { $ERROR('#О'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u041F = 1; if (П !== 1) { $ERROR('#П'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0420 = 1; if (Р !== 1) { $ERROR('#Р'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0421 = 1; if (С !== 1) { $ERROR('#С'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0422 = 1; if (Т !== 1) { $ERROR('#Т'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0423 = 1; if (У !== 1) { $ERROR('#У'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0424 = 1; if (Ф !== 1) { $ERROR('#Ф'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0425 = 1; if (Х !== 1) { $ERROR('#Х'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0426 = 1; if (Ц !== 1) { $ERROR('#Ц'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0427 = 1; if (Ч !== 1) { $ERROR('#Ч'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0428 = 1; if (Ш !== 1) { $ERROR('#Ш'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0429 = 1; if (Щ !== 1) { $ERROR('#Щ'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042A = 1; if (Ъ !== 1) { $ERROR('#Ъ'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042B = 1; if (Ы !== 1) { $ERROR('#Ы'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042C = 1; if (Ь !== 1) { $ERROR('#Ь'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042D = 1; if (Э !== 1) { $ERROR('#Э'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042E = 1; if (Ю !== 1) { $ERROR('#Ю'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u042F = 1; if (Я !== 1) { $ERROR('#Я'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } var \u0401 = 1; if (Ё !== 1) { $ERROR('#Ё'); ~~~~~~ -!!! error TS2304: Cannot find name '$ERROR'. +!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? } \ No newline at end of file diff --git a/tests/baselines/reference/scannertest1.errors.txt b/tests/baselines/reference/scannertest1.errors.txt index fce2a0b292a..6a98346e001 100644 --- a/tests/baselines/reference/scannertest1.errors.txt +++ b/tests/baselines/reference/scannertest1.errors.txt @@ -1,19 +1,19 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(1,1): error TS6053: File 'tests/cases/conformance/scanner/ecmascript5/References.ts' not found. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,21): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,47): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,21): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(9,16): error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,22): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,47): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,22): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,47): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,22): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,22): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(15,9): error TS2304: Cannot find name 'Debug'. tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(15,22): error TS2662: Cannot find name 'isHexDigit'. Did you mean the static member 'CharacterInfo.isHexDigit'? tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(16,16): error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(17,20): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,21): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,46): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(19,23): error TS2304: Cannot find name 'CharacterCodes'. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(17,20): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,21): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,46): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(19,23): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ==== tests/cases/conformance/scanner/ecmascript5/scannertest1.ts (16 errors) ==== @@ -25,9 +25,9 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304 public static isDecimalDigit(c: number): boolean { return c >= CharacterCodes._0 && c <= CharacterCodes._9; ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? } public static isHexDigit(c: number): boolean { @@ -36,14 +36,14 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304 !!! error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? (c >= CharacterCodes.A && c <= CharacterCodes.F) || ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? (c >= CharacterCodes.a && c <= CharacterCodes.f); ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? } public static hexValue(c: number): number { @@ -57,18 +57,18 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304 !!! error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? ? (c - CharacterCodes._0) ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? : (c >= CharacterCodes.A && c <= CharacterCodes.F) ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? ? c - CharacterCodes.A + 10 ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? : c - CharacterCodes.a + 10; ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'CharacterCodes'. +!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? } } diff --git a/tests/baselines/reference/staticsInAFunction.errors.txt b/tests/baselines/reference/staticsInAFunction.errors.txt index 48104fd52f4..46636037c97 100644 --- a/tests/baselines/reference/staticsInAFunction.errors.txt +++ b/tests/baselines/reference/staticsInAFunction.errors.txt @@ -5,12 +5,12 @@ tests/cases/compiler/staticsInAFunction.ts(3,4): error TS1128: Declaration or st tests/cases/compiler/staticsInAFunction.ts(3,11): error TS2304: Cannot find name 'test'. tests/cases/compiler/staticsInAFunction.ts(3,16): error TS2304: Cannot find name 'name'. tests/cases/compiler/staticsInAFunction.ts(3,20): error TS1005: ',' expected. -tests/cases/compiler/staticsInAFunction.ts(3,21): error TS2304: Cannot find name 'string'. +tests/cases/compiler/staticsInAFunction.ts(3,21): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/staticsInAFunction.ts(4,4): error TS1128: Declaration or statement expected. tests/cases/compiler/staticsInAFunction.ts(4,11): error TS2304: Cannot find name 'test'. tests/cases/compiler/staticsInAFunction.ts(4,16): error TS2304: Cannot find name 'name'. tests/cases/compiler/staticsInAFunction.ts(4,21): error TS1109: Expression expected. -tests/cases/compiler/staticsInAFunction.ts(4,22): error TS2304: Cannot find name 'any'. +tests/cases/compiler/staticsInAFunction.ts(4,22): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/compiler/staticsInAFunction.ts(4,26): error TS1005: ';' expected. @@ -33,7 +33,7 @@ tests/cases/compiler/staticsInAFunction.ts(4,26): error TS1005: ';' expected. ~ !!! error TS1005: ',' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? static test(name?:any){} ~~~~~~ !!! error TS1128: Declaration or statement expected. @@ -44,7 +44,7 @@ tests/cases/compiler/staticsInAFunction.ts(4,26): error TS1005: ';' expected. ~ !!! error TS1109: Expression expected. ~~~ -!!! error TS2304: Cannot find name 'any'. +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ~ !!! error TS1005: ';' expected. } diff --git a/tests/baselines/reference/strictModeReservedWord.errors.txt b/tests/baselines/reference/strictModeReservedWord.errors.txt index 5a6de7792b7..f2f74c81a93 100644 --- a/tests/baselines/reference/strictModeReservedWord.errors.txt +++ b/tests/baselines/reference/strictModeReservedWord.errors.txt @@ -38,7 +38,7 @@ tests/cases/compiler/strictModeReservedWord.ts(22,12): error TS1212: Identifier tests/cases/compiler/strictModeReservedWord.ts(22,12): error TS2503: Cannot find namespace 'interface'. tests/cases/compiler/strictModeReservedWord.ts(22,22): error TS1212: Identifier expected. 'package' is a reserved word in strict mode. tests/cases/compiler/strictModeReservedWord.ts(22,30): error TS1212: Identifier expected. 'implements' is a reserved word in strict mode. -tests/cases/compiler/strictModeReservedWord.ts(23,5): error TS2304: Cannot find name 'ublic'. +tests/cases/compiler/strictModeReservedWord.ts(23,5): error TS2552: Cannot find name 'ublic'. Did you mean 'public'? tests/cases/compiler/strictModeReservedWord.ts(24,5): error TS1212: Identifier expected. 'static' is a reserved word in strict mode. tests/cases/compiler/strictModeReservedWord.ts(24,5): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'String' has no compatible call signatures. @@ -148,7 +148,7 @@ tests/cases/compiler/strictModeReservedWord.ts(24,5): error TS2349: Cannot invok !!! error TS1212: Identifier expected. 'implements' is a reserved word in strict mode. ublic(); ~~~~~ -!!! error TS2304: Cannot find name 'ublic'. +!!! error TS2552: Cannot find name 'ublic'. Did you mean 'public'? static(); ~~~~~~ !!! error TS1212: Identifier expected. 'static' is a reserved word in strict mode. diff --git a/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt b/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt index e88f4c1ca96..c136d3dd573 100644 --- a/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt +++ b/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt @@ -91,7 +91,7 @@ tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,30): e tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,32): error TS1138: Parameter declaration expected. tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,39): error TS1005: ';' expected. tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,40): error TS1128: Declaration or statement expected. -tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,42): error TS2304: Cannot find name 'number'. +tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,42): error TS2552: Cannot find name 'number'. Did you mean 'Number'? tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(172,49): error TS1005: ';' expected. tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(175,1): error TS7027: Unreachable code detected. tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(175,29): error TS2304: Cannot find name 'm'. @@ -425,7 +425,7 @@ tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(175,35): e ~ !!! error TS1128: Declaration or statement expected. ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? ~ !!! error TS1005: ';' expected. diff --git a/tests/baselines/reference/tsxAttributeInvalidNames.errors.txt b/tests/baselines/reference/tsxAttributeInvalidNames.errors.txt index 0607a01a11c..d6d7b2f277a 100644 --- a/tests/baselines/reference/tsxAttributeInvalidNames.errors.txt +++ b/tests/baselines/reference/tsxAttributeInvalidNames.errors.txt @@ -1,13 +1,13 @@ tests/cases/conformance/jsx/file.tsx(10,8): error TS1003: Identifier expected. tests/cases/conformance/jsx/file.tsx(10,10): error TS1005: ';' expected. -tests/cases/conformance/jsx/file.tsx(10,10): error TS2304: Cannot find name 'data'. +tests/cases/conformance/jsx/file.tsx(10,10): error TS2552: Cannot find name 'data'. Did you mean 'Date'? tests/cases/conformance/jsx/file.tsx(10,15): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/jsx/file.tsx(10,18): error TS1005: ':' expected. tests/cases/conformance/jsx/file.tsx(10,21): error TS1109: Expression expected. tests/cases/conformance/jsx/file.tsx(10,22): error TS1109: Expression expected. tests/cases/conformance/jsx/file.tsx(11,1): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/jsx/file.tsx(11,8): error TS1003: Identifier expected. -tests/cases/conformance/jsx/file.tsx(11,9): error TS2304: Cannot find name 'data'. +tests/cases/conformance/jsx/file.tsx(11,9): error TS2552: Cannot find name 'data'. Did you mean 'Date'? tests/cases/conformance/jsx/file.tsx(11,13): error TS1005: ';' expected. tests/cases/conformance/jsx/file.tsx(11,20): error TS1161: Unterminated regular expression literal. @@ -28,7 +28,7 @@ tests/cases/conformance/jsx/file.tsx(11,20): error TS1161: Unterminated regular ~~~~ !!! error TS1005: ';' expected. ~~~~ -!!! error TS2304: Cannot find name 'data'. +!!! error TS2552: Cannot find name 'data'. Did you mean 'Date'? ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. ~ @@ -43,7 +43,7 @@ tests/cases/conformance/jsx/file.tsx(11,20): error TS1161: Unterminated regular ~ !!! error TS1003: Identifier expected. ~~~~ -!!! error TS2304: Cannot find name 'data'. +!!! error TS2552: Cannot find name 'data'. Did you mean 'Date'? ~ !!! error TS1005: ';' expected. diff --git a/tests/baselines/reference/typeAssertions.errors.txt b/tests/baselines/reference/typeAssertions.errors.txt index c840e016083..bfc42321505 100644 --- a/tests/baselines/reference/typeAssertions.errors.txt +++ b/tests/baselines/reference/typeAssertions.errors.txt @@ -11,7 +11,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,5): erro tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,14): error TS1005: '>' expected. tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,14): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,17): error TS1005: ')' expected. -tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,17): error TS2304: Cannot find name 'string'. +tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,17): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(44,48): error TS1005: ';' expected. tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(45,2): error TS2322: Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. @@ -19,7 +19,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,32): err tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,41): error TS1005: ')' expected. tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,41): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,44): error TS1005: ';' expected. -tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,44): error TS2304: Cannot find name 'string'. +tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,44): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,50): error TS1005: ';' expected. @@ -91,7 +91,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,50): err ~~~~~~ !!! error TS1005: ')' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ';' expected. str = numOrStr; // Error, no narrowing occurred @@ -110,7 +110,7 @@ tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts(48,50): err ~~~~~~ !!! error TS1005: ';' expected. ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS2552: Cannot find name 'string'. Did you mean 'String'? ~ !!! error TS1005: ';' expected. } diff --git a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt index d50d86afa5e..1c57ec5cf68 100644 --- a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt +++ b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(1,7): tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(14,5): error TS2322: Type '""' is not assignable to type 'boolean'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,55): error TS2304: Cannot find name 'x'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS1144: '{' or ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS2304: Cannot find name 'is'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS2552: Cannot find name 'is'. Did you mean 'isB'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,60): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,62): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(21,33): error TS2304: Cannot find name 'x'. @@ -19,9 +19,9 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(41,56) Type 'number' is not assignable to type 'string'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(45,56): error TS2677: A type predicate's type must be assignable to its parameter's type. Type 'T[]' is not assignable to type 'string'. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(59,7): error TS2339: Property 'propB' does not exist on type 'A'. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(64,7): error TS2339: Property 'propB' does not exist on type 'A'. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(69,7): error TS2339: Property 'propB' does not exist on type 'A'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(59,7): error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(64,7): error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(69,7): error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(74,46): error TS2345: Argument of type '(p1: any) => p1 is C' is not assignable to parameter of type '(p1: any) => p1 is B'. Type predicate 'p1 is C' is not assignable to 'p1 is B'. Type 'C' is not assignable to type 'B'. @@ -34,16 +34,16 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(84,1): tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(90,1): error TS2322: Type '(p1: any, p2: any, p3: any) => p1 is A' is not assignable to type '(p1: any, p2: any) => p1 is A'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,9): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS1005: '=' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS2304: Cannot find name 'is'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS2552: Cannot find name 'is'. Did you mean 'isB'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,14): error TS1005: ',' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,14): error TS2300: Duplicate identifier 'A'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,16): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS1005: '=' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS2304: Cannot find name 'is'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS2552: Cannot find name 'is'. Did you mean 'isB'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,21): error TS1005: ',' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,20): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS1144: '{' or ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS2304: Cannot find name 'is'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS2552: Cannot find name 'is'. Did you mean 'isB'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,25): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,27): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(103,25): error TS1228: A type predicate is only allowed in return type position for functions and methods. @@ -55,7 +55,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(110,9) tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(115,18): error TS1228: A type predicate is only allowed in return type position for functions and methods. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,22): error TS2304: Cannot find name 'p1'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS1005: ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS2304: Cannot find name 'is'. +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS2552: Cannot find name 'is'. Did you mean 'isB'? tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,28): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(120,1): error TS1128: Declaration or statement expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(123,20): error TS1229: A type predicate cannot reference a rest parameter. @@ -91,7 +91,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1144: '{' or ';' expected. ~~ -!!! error TS2304: Cannot find name 'is'. +!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? ~ !!! error TS1005: ';' expected. ~ @@ -163,21 +163,21 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 if (isB(b)) { a.propB; ~~~~~ -!!! error TS2339: Property 'propB' does not exist on type 'A'. +!!! error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? } // Parameter index and argument index for the type guard target is not matching. if (funA(0, a)) { a.propB; // Error ~~~~~ -!!! error TS2339: Property 'propB' does not exist on type 'A'. +!!! error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? } // No type guard in if statement if (hasNoTypeGuard(a)) { a.propB; ~~~~~ -!!! error TS2339: Property 'propB' does not exist on type 'A'. +!!! error TS2551: Property 'propB' does not exist on type 'A'. Did you mean 'propA'? } // Type predicate type is not assignable @@ -223,7 +223,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: '=' expected. ~~ -!!! error TS2304: Cannot find name 'is'. +!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? ~ !!! error TS1005: ',' expected. ~ @@ -234,7 +234,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: '=' expected. ~~ -!!! error TS2304: Cannot find name 'is'. +!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? ~ !!! error TS1005: ',' expected. function b3(): A | b is A { @@ -243,7 +243,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1144: '{' or ';' expected. ~~ -!!! error TS2304: Cannot find name 'is'. +!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? ~ !!! error TS1005: ';' expected. ~ @@ -289,7 +289,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: ';' expected. ~~ -!!! error TS2304: Cannot find name 'is'. +!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? ~ !!! error TS1005: ';' expected. } diff --git a/tests/baselines/reference/typeGuardsWithInstanceOfByConstructorSignature.errors.txt b/tests/baselines/reference/typeGuardsWithInstanceOfByConstructorSignature.errors.txt index 31db51bf57e..096b19c3717 100644 --- a/tests/baselines/reference/typeGuardsWithInstanceOfByConstructorSignature.errors.txt +++ b/tests/baselines/reference/typeGuardsWithInstanceOfByConstructorSignature.errors.txt @@ -3,14 +3,14 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(33,5): error TS2322: Type '"str"' is not assignable to type 'number'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(34,10): error TS2339: Property 'bar' does not exist on type 'B'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(41,10): error TS2339: Property 'bar' does not exist on type 'B'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(66,10): error TS2339: Property 'bar2' does not exist on type 'C1'. +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(66,10): error TS2551: Property 'bar2' does not exist on type 'C1'. Did you mean 'bar1'? tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(72,10): error TS2339: Property 'bar1' does not exist on type 'C1 | C2'. Property 'bar1' does not exist on type 'C2'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(73,10): error TS2339: Property 'bar2' does not exist on type 'C1 | C2'. Property 'bar2' does not exist on type 'C1'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(85,10): error TS2339: Property 'bar' does not exist on type 'D'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(91,10): error TS2339: Property 'bar' does not exist on type 'D'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(112,10): error TS2339: Property 'bar2' does not exist on type 'E1'. +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(112,10): error TS2551: Property 'bar2' does not exist on type 'E1'. Did you mean 'bar1'? tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(118,11): error TS2339: Property 'bar1' does not exist on type 'E1 | E2'. Property 'bar1' does not exist on type 'E2'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(119,11): error TS2339: Property 'bar2' does not exist on type 'E1 | E2'. @@ -19,11 +19,11 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru Property 'foo' does not exist on type 'string'. tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(135,11): error TS2339: Property 'bar' does not exist on type 'string | F'. Property 'bar' does not exist on type 'string'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(160,11): error TS2339: Property 'foo2' does not exist on type 'G1'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(166,11): error TS2339: Property 'foo2' does not exist on type 'G1'. +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(160,11): error TS2551: Property 'foo2' does not exist on type 'G1'. Did you mean 'foo1'? +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(166,11): error TS2551: Property 'foo2' does not exist on type 'G1'. Did you mean 'foo1'? tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(182,11): error TS2339: Property 'bar' does not exist on type 'H'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(187,11): error TS2339: Property 'foo1' does not exist on type 'H'. -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(188,11): error TS2339: Property 'foo2' does not exist on type 'H'. +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(187,11): error TS2551: Property 'foo1' does not exist on type 'H'. Did you mean 'foo'? +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts(188,11): error TS2551: Property 'foo2' does not exist on type 'H'. Did you mean 'foo'? ==== tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstructorSignature.ts (20 errors) ==== @@ -104,7 +104,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru obj5.bar1; obj5.bar2; ~~~~ -!!! error TS2339: Property 'bar2' does not exist on type 'C1'. +!!! error TS2551: Property 'bar2' does not exist on type 'C1'. Did you mean 'bar1'? } var obj6: any; @@ -162,7 +162,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru obj9.bar1; obj9.bar2; ~~~~ -!!! error TS2339: Property 'bar2' does not exist on type 'E1'. +!!! error TS2551: Property 'bar2' does not exist on type 'E1'. Did you mean 'bar1'? } var obj10: any; @@ -224,7 +224,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru obj13.foo1; obj13.foo2; ~~~~ -!!! error TS2339: Property 'foo2' does not exist on type 'G1'. +!!! error TS2551: Property 'foo2' does not exist on type 'G1'. Did you mean 'foo1'? } var obj14: any; @@ -232,7 +232,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru obj14.foo1; obj14.foo2; ~~~~ -!!! error TS2339: Property 'foo2' does not exist on type 'G1'. +!!! error TS2551: Property 'foo2' does not exist on type 'G1'. Did you mean 'foo1'? } // a type with a prototype that has any type @@ -257,10 +257,10 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOfByConstru if (obj16 instanceof H) { obj16.foo1; ~~~~ -!!! error TS2339: Property 'foo1' does not exist on type 'H'. +!!! error TS2551: Property 'foo1' does not exist on type 'H'. Did you mean 'foo'? obj16.foo2; ~~~~ -!!! error TS2339: Property 'foo2' does not exist on type 'H'. +!!! error TS2551: Property 'foo2' does not exist on type 'H'. Did you mean 'foo'? } var obj17: any; diff --git a/tests/baselines/reference/typeParametersAndParametersInComputedNames.errors.txt b/tests/baselines/reference/typeParametersAndParametersInComputedNames.errors.txt index 872a0a10923..f01f7520cba 100644 --- a/tests/baselines/reference/typeParametersAndParametersInComputedNames.errors.txt +++ b/tests/baselines/reference/typeParametersAndParametersInComputedNames.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/typeParametersAndParametersInComputedNames.ts(6,10): error TS2304: Cannot find name 'T'. -tests/cases/compiler/typeParametersAndParametersInComputedNames.ts(6,13): error TS2304: Cannot find name 'a'. +tests/cases/compiler/typeParametersAndParametersInComputedNames.ts(6,13): error TS2552: Cannot find name 'a'. Did you mean 'A'? ==== tests/cases/compiler/typeParametersAndParametersInComputedNames.ts (2 errors) ==== @@ -12,6 +12,6 @@ tests/cases/compiler/typeParametersAndParametersInComputedNames.ts(6,13): error ~ !!! error TS2304: Cannot find name 'T'. ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS2552: Cannot find name 'a'. Did you mean 'A'? } } \ No newline at end of file diff --git a/tests/baselines/reference/undeclaredMethod.errors.txt b/tests/baselines/reference/undeclaredMethod.errors.txt index 942d1908182..4e7bf187440 100644 --- a/tests/baselines/reference/undeclaredMethod.errors.txt +++ b/tests/baselines/reference/undeclaredMethod.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2339: Property 'saltbar' does not exist on type 'C'. +tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2551: Property 'saltbar' does not exist on type 'C'. Did you mean 'salt'? ==== tests/cases/compiler/undeclaredMethod.ts (1 errors) ==== @@ -13,6 +13,6 @@ tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2339: Property 'saltbar' c.salt(); // cool c.saltbar(); // crash ~~~~~~~ -!!! error TS2339: Property 'saltbar' does not exist on type 'C'. +!!! error TS2551: Property 'saltbar' does not exist on type 'C'. Did you mean 'salt'? \ No newline at end of file diff --git a/tests/baselines/reference/undeclaredVarEmit.errors.txt b/tests/baselines/reference/undeclaredVarEmit.errors.txt index a95323aa362..689360aa899 100644 --- a/tests/baselines/reference/undeclaredVarEmit.errors.txt +++ b/tests/baselines/reference/undeclaredVarEmit.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/undeclaredVarEmit.ts(1,1): error TS7028: Unused label. -tests/cases/compiler/undeclaredVarEmit.ts(1,4): error TS2304: Cannot find name 'number'. +tests/cases/compiler/undeclaredVarEmit.ts(1,4): error TS2552: Cannot find name 'number'. Did you mean 'Number'? ==== tests/cases/compiler/undeclaredVarEmit.ts (2 errors) ==== @@ -7,4 +7,4 @@ tests/cases/compiler/undeclaredVarEmit.ts(1,4): error TS2304: Cannot find name ' ~ !!! error TS7028: Unused label. ~~~~~~ -!!! error TS2304: Cannot find name 'number'. \ No newline at end of file +!!! error TS2552: Cannot find name 'number'. Did you mean 'Number'? \ No newline at end of file diff --git a/tests/cases/fourslash/codeFixAddMissingMember3.ts b/tests/cases/fourslash/codeFixAddMissingMember3.ts index 5864c9c1029..47cacd6753a 100644 --- a/tests/cases/fourslash/codeFixAddMissingMember3.ts +++ b/tests/cases/fourslash/codeFixAddMissingMember3.ts @@ -11,4 +11,4 @@ verify.rangeAfterCodeFix(`class C { static method() { this.foo = 10; } -}`); \ No newline at end of file +}`, /*includeWhiteSpace*/false, /*errorCode*/ undefined, /*index*/ 0); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport0.ts b/tests/cases/fourslash/importNameCodeFixExistingImport0.ts index 5e5be220688..e5b63499878 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport0.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport0.ts @@ -7,4 +7,4 @@ //// export function f1() {} //// export var v1 = 5; -verify.importFixAtPosition([`{ v1, f1 }`]); \ No newline at end of file +verify.importFixAtPosition([`{ v1, f1 }`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport1.ts b/tests/cases/fourslash/importNameCodeFixExistingImport1.ts index 9571d0fcf57..49680692b6c 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport1.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport1.ts @@ -8,4 +8,4 @@ //// export var v1 = 5; //// export default var d1 = 6; -verify.importFixAtPosition([`{ v1, f1 }`]); \ No newline at end of file +verify.importFixAtPosition([`{ v1, f1 }`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport10.ts b/tests/cases/fourslash/importNameCodeFixExistingImport10.ts index 8a178e72730..a9525d272da 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport10.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport10.ts @@ -18,4 +18,4 @@ verify.importFixAtPosition([ v2, f1 }` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport11.ts b/tests/cases/fourslash/importNameCodeFixExistingImport11.ts index 8822356c13a..786e0e39775 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport11.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport11.ts @@ -18,4 +18,4 @@ verify.importFixAtPosition([ v3, f1 }` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport12.ts b/tests/cases/fourslash/importNameCodeFixExistingImport12.ts index e00dee504c5..87ba29ab0aa 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport12.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport12.ts @@ -9,4 +9,4 @@ //// export var v2 = 5; //// export var v3 = 5; -verify.importFixAtPosition([`{ f1 }`]); \ No newline at end of file +verify.importFixAtPosition([`{ f1 }`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport2.ts b/tests/cases/fourslash/importNameCodeFixExistingImport2.ts index 6a92976f4ef..1146f24aeae 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport2.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport2.ts @@ -12,5 +12,5 @@ verify.importFixAtPosition([ import { f1 } from "./module"; f1();`, `import * as ns from "./module"; -ns.f1();` -]); \ No newline at end of file +ns.f1();`, +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport3.ts b/tests/cases/fourslash/importNameCodeFixExistingImport3.ts index bc00e8d420a..9fc44378713 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport3.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport3.ts @@ -14,5 +14,5 @@ verify.importFixAtPosition([ ns.f1();`, `import d, * as ns from "./module" ; import { f1 } from "./module"; -f1();`, -]); \ No newline at end of file +f1();` +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport4.ts b/tests/cases/fourslash/importNameCodeFixExistingImport4.ts index d93cb73664e..1aaf34f598c 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport4.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport4.ts @@ -11,4 +11,4 @@ verify.importFixAtPosition([ `import d, { f1 } from "./module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport5.ts b/tests/cases/fourslash/importNameCodeFixExistingImport5.ts index ed9297124d9..bfcf888b17b 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport5.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport5.ts @@ -9,4 +9,4 @@ verify.importFixAtPosition([`import "./module"; import { f1 } from "./module"; -f1();`]); \ No newline at end of file +f1();`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport6.ts b/tests/cases/fourslash/importNameCodeFixExistingImport6.ts index 7ae157a51ce..0d3636e4439 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport6.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport6.ts @@ -10,4 +10,4 @@ //// export var v1 = 5; //// export function f1(); -verify.importFixAtPosition([`{ v1, f1 }`]); \ No newline at end of file +verify.importFixAtPosition([`{ v1, f1 }`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport7.ts b/tests/cases/fourslash/importNameCodeFixExistingImport7.ts index 249929eabc7..f0b1a77f690 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport7.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport7.ts @@ -7,4 +7,4 @@ //// export var v1 = 5; //// export function f1(); -verify.importFixAtPosition([`{ v1, f1 }`]); \ No newline at end of file +verify.importFixAtPosition([`{ v1, f1 }`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport8.ts b/tests/cases/fourslash/importNameCodeFixExistingImport8.ts index da7beaa0a47..a1b676a8b83 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport8.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport8.ts @@ -9,4 +9,4 @@ //// export var v2 = 5; //// export var v3 = 5; -verify.importFixAtPosition([`{v1, v2, v3, f1,}`]); \ No newline at end of file +verify.importFixAtPosition([`{v1, v2, v3, f1,}`]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImport9.ts b/tests/cases/fourslash/importNameCodeFixExistingImport9.ts index 51496abff12..67960de32d4 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImport9.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImport9.ts @@ -13,4 +13,4 @@ verify.importFixAtPosition([ `{ v1, f1 }` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixExistingImportEquals0.ts b/tests/cases/fourslash/importNameCodeFixExistingImportEquals0.ts index f431e6356d1..de86ed13cd5 100644 --- a/tests/cases/fourslash/importNameCodeFixExistingImportEquals0.ts +++ b/tests/cases/fourslash/importNameCodeFixExistingImportEquals0.ts @@ -15,4 +15,4 @@ var x = ns.v1 + 5;`, `import ns = require("ambient-module"); import { v1 } from "ambient-module"; var x = v1 + 5;`, -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportAmbient0.ts b/tests/cases/fourslash/importNameCodeFixNewImportAmbient0.ts index 1d7b5bc3e7f..75ef89ee4a5 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportAmbient0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportAmbient0.ts @@ -12,4 +12,4 @@ verify.importFixAtPosition([ `import { f1 } from "ambient-module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportAmbient1.ts b/tests/cases/fourslash/importNameCodeFixNewImportAmbient1.ts index 60504c89711..835850306f6 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportAmbient1.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportAmbient1.ts @@ -25,4 +25,4 @@ verify.importFixAtPosition([ `import * as ns from "yet-another-ambient-module"; import { v1 } from "ambient-module"; var x = v1 + 5;` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportAmbient2.ts b/tests/cases/fourslash/importNameCodeFixNewImportAmbient2.ts index 999da4bffbb..a23d7684d0a 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportAmbient2.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportAmbient2.ts @@ -18,4 +18,4 @@ verify.importFixAtPosition([ import { f1 } from "ambient-module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportAmbient3.ts b/tests/cases/fourslash/importNameCodeFixNewImportAmbient3.ts index 648293cce2e..dbd6c4ef26a 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportAmbient3.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportAmbient3.ts @@ -27,4 +27,4 @@ verify.importFixAtPosition([ `import * as ns from "yet-another-ambient-module" import { v1 } from "ambient-module"; var x = v1 + 5;` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportBaseUrl0.ts b/tests/cases/fourslash/importNameCodeFixNewImportBaseUrl0.ts index e15c2cf4399..a48b381df68 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportBaseUrl0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportBaseUrl0.ts @@ -16,4 +16,4 @@ verify.importFixAtPosition([ `import { f1 } from "b"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportDefault0.ts b/tests/cases/fourslash/importNameCodeFixNewImportDefault0.ts index 3efe023e922..b27cbde3283 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportDefault0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportDefault0.ts @@ -9,4 +9,4 @@ verify.importFixAtPosition([ `import f1 from "./module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFile0.ts b/tests/cases/fourslash/importNameCodeFixNewImportFile0.ts index 2372110437a..12566de406d 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportFile0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportFile0.ts @@ -10,4 +10,4 @@ verify.importFixAtPosition([ `import { f1 } from "./module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFile1.ts b/tests/cases/fourslash/importNameCodeFixNewImportFile1.ts index 9f6cac0b7c1..b98345db9f6 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportFile1.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportFile1.ts @@ -15,4 +15,4 @@ verify.importFixAtPosition([ import { f1 } from "./Module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportFile2.ts b/tests/cases/fourslash/importNameCodeFixNewImportFile2.ts index ca9330e9846..5d5c1fb61bc 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportFile2.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportFile2.ts @@ -10,4 +10,4 @@ verify.importFixAtPosition([ `import { f1 } from "../../other_dir/module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules1.ts b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules1.ts index 6bffe41b27a..77b1545e3c0 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules1.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules1.ts @@ -13,4 +13,4 @@ verify.importFixAtPosition([ `import { f1 } from "fake-module/nested"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules2.ts b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules2.ts index ff48fbe182c..80cb53d7e09 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules2.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules2.ts @@ -22,4 +22,4 @@ verify.importFixAtPosition([ `import { f1 } from "fake-module"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules3.ts b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules3.ts index b1143cb4b41..f0e09885a6b 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportNodeModules3.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportNodeModules3.ts @@ -11,4 +11,4 @@ verify.importFixAtPosition([ `import { f1 } from "random"; f1();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportPaths0.ts b/tests/cases/fourslash/importNameCodeFixNewImportPaths0.ts index 93cd6f92ef5..bd3fd9a84b3 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportPaths0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportPaths0.ts @@ -19,4 +19,4 @@ verify.importFixAtPosition([ `import { foo } from "a"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportPaths1.ts b/tests/cases/fourslash/importNameCodeFixNewImportPaths1.ts index bb0f1e6705a..5ac195e9ab4 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportPaths1.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportPaths1.ts @@ -19,4 +19,4 @@ verify.importFixAtPosition([ `import { foo } from "b/f2"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportPaths2.ts b/tests/cases/fourslash/importNameCodeFixNewImportPaths2.ts index b455538de08..33b8d9330be 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportPaths2.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportPaths2.ts @@ -25,4 +25,4 @@ verify.importFixAtPosition([ `import { foo } from "b"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportRootDirs0.ts b/tests/cases/fourslash/importNameCodeFixNewImportRootDirs0.ts index ae8ef03ccac..8721d7e0105 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportRootDirs0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportRootDirs0.ts @@ -20,4 +20,4 @@ verify.importFixAtPosition([ `import { foo } from "./f2"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots0.ts b/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots0.ts index a6eb6a90759..cb7ef465aff 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots0.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots0.ts @@ -19,4 +19,4 @@ verify.importFixAtPosition([ `import { foo } from "random"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots1.ts b/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots1.ts index 2778f51bacf..1398a5d7866 100644 --- a/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots1.ts +++ b/tests/cases/fourslash/importNameCodeFixNewImportTypeRoots1.ts @@ -20,4 +20,4 @@ verify.importFixAtPosition([ `import { foo } from "random"; foo();` -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixOptionalImport0.ts b/tests/cases/fourslash/importNameCodeFixOptionalImport0.ts index 30b482a94d7..34cebad9415 100644 --- a/tests/cases/fourslash/importNameCodeFixOptionalImport0.ts +++ b/tests/cases/fourslash/importNameCodeFixOptionalImport0.ts @@ -17,4 +17,4 @@ foo();`, `import * as ns from "./foo"; ns.foo();`, -]); \ No newline at end of file +]); diff --git a/tests/cases/fourslash/importNameCodeFixOptionalImport1.ts b/tests/cases/fourslash/importNameCodeFixOptionalImport1.ts index 343b0692260..7a3d19e1532 100644 --- a/tests/cases/fourslash/importNameCodeFixOptionalImport1.ts +++ b/tests/cases/fourslash/importNameCodeFixOptionalImport1.ts @@ -17,4 +17,4 @@ foo();`, `import { foo } from "bar"; foo();`, -]); \ No newline at end of file +]); From ca7d7f5946f089c6c94d75bc478f5dfdb10a540a Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 1 May 2017 12:58:42 -0700 Subject: [PATCH 11/92] Only 100 spelling corrections for unknown symbols If your compilation has more than 100 unknown symbols, the problem is missing declarations, not typos. --- src/compiler/checker.ts | 5 +- .../maximum100SpellingSuggestions.errors.txt | 378 ++++++++++++++++++ .../maximum100SpellingSuggestions.js | 140 +++++++ .../compiler/maximum100SpellingSuggestions.ts | 14 + 4 files changed, 536 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/maximum100SpellingSuggestions.errors.txt create mode 100644 tests/baselines/reference/maximum100SpellingSuggestions.js create mode 100644 tests/cases/compiler/maximum100SpellingSuggestions.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7b7aaf9937c..76ff43f20e2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -318,6 +318,8 @@ namespace ts { const resolutionResults: boolean[] = []; const resolutionPropertyNames: TypeSystemPropertyName[] = []; + let suggestionCount = 0; + const maximumSuggestionCount = 100; const mergedSymbols: Symbol[] = []; const symbolLinks: SymbolLinks[] = []; const nodeLinks: NodeLinks[] = []; @@ -1091,9 +1093,10 @@ namespace ts { !checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) && !checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning)) { let suggestion: string | undefined; - if (suggestedNameNotFoundMessage) { + if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) { suggestion = getSuggestionForNonexistentSymbol(originalLocation, name, meaning); if (suggestion) { + suggestionCount++; error(errorLocation, suggestedNameNotFoundMessage, typeof nameArg === "string" ? nameArg : declarationNameToString(nameArg), suggestion); } } diff --git a/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt b/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt new file mode 100644 index 00000000000..4f921104d77 --- /dev/null +++ b/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt @@ -0,0 +1,378 @@ +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(3,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(4,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(5,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(6,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(7,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(8,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(9,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(10,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(11,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(12,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,1): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,6): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,11): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,16): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,21): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,26): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,31): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,36): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,41): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(13,46): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,1): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,6): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,11): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,16): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,21): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,26): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,31): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,36): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,41): error TS2304: Cannot find name 'any'. +tests/cases/compiler/maximum100SpellingSuggestions.ts(14,46): error TS2304: Cannot find name 'any'. + + +==== tests/cases/compiler/maximum100SpellingSuggestions.ts (120 errors) ==== + // 10 anys per line, 12 lines + // the last two lines should not have spelling suggestions + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + ~~~ +!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + any; any; any; any; any; any; any; any; any; any; + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + ~~~ +!!! error TS2304: Cannot find name 'any'. + \ No newline at end of file diff --git a/tests/baselines/reference/maximum100SpellingSuggestions.js b/tests/baselines/reference/maximum100SpellingSuggestions.js new file mode 100644 index 00000000000..5746091feb1 --- /dev/null +++ b/tests/baselines/reference/maximum100SpellingSuggestions.js @@ -0,0 +1,140 @@ +//// [maximum100SpellingSuggestions.ts] +// 10 anys per line, 12 lines +// the last two lines should not have spelling suggestions +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; + + +//// [maximum100SpellingSuggestions.js] +// 10 anys per line, 12 lines +// the last two lines should not have spelling suggestions +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; +any; diff --git a/tests/cases/compiler/maximum100SpellingSuggestions.ts b/tests/cases/compiler/maximum100SpellingSuggestions.ts new file mode 100644 index 00000000000..febc10c1c6f --- /dev/null +++ b/tests/cases/compiler/maximum100SpellingSuggestions.ts @@ -0,0 +1,14 @@ +// 10 anys per line, 12 lines +// the last two lines should not have spelling suggestions +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; +any; any; any; any; any; any; any; any; any; any; From eb33ba7d97f09b1c0835a7edc8983d0c12072ffa Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 1 May 2017 13:03:49 -0700 Subject: [PATCH 12/92] Fix semicolon lint --- src/compiler/utilities.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 1ce2cf2c991..02acacf9e7c 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4643,7 +4643,7 @@ namespace ts { current[j] = Math.min( previous[j] + 1, current[j - 1] + 1, - previous[j - 1] + (s1[i - 1] === s2[j - 1] ? 0 : 2)) + previous[j - 1] + (s1[i - 1] === s2[j - 1] ? 0 : 2)); } // shift current back to previous, and then reuse previous' array const tmp = previous; From d37426d865f51aa8be2eca4f0d5c4260f6b8ed3a Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Mon, 1 May 2017 13:23:34 -0700 Subject: [PATCH 13/92] Fill out remaining factory functions --- src/compiler/checker.ts | 6 +- src/compiler/factory.ts | 801 ++++++++++-------- src/compiler/types.ts | 2 +- src/compiler/utilities.ts | 13 +- src/compiler/visitor.ts | 267 +++--- src/harness/unittests/transform.ts | 3 + src/services/codefixes/fixAddMissingMember.ts | 16 +- src/services/codefixes/helpers.ts | 2 +- 8 files changed, 603 insertions(+), 507 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18e57303c12..0ec9f23266e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2389,7 +2389,7 @@ namespace ts { const formattedUnionTypes = formatUnionTypes((type).types); const unionTypeNodes = formattedUnionTypes && mapToTypeNodeArray(formattedUnionTypes); if (unionTypeNodes && unionTypeNodes.length > 0) { - return createUnionOrIntersectionTypeNode(SyntaxKind.UnionType, unionTypeNodes); + return createUnionTypeNode(unionTypeNodes); } else { if (!context.encounteredError && !(context.flags & NodeBuilderFlags.allowEmptyUnionOrIntersection)) { @@ -2400,7 +2400,7 @@ namespace ts { } if (type.flags & TypeFlags.Intersection) { - return createUnionOrIntersectionTypeNode(SyntaxKind.IntersectionType, mapToTypeNodeArray((type as UnionType).types)); + return createIntersectionTypeNode(mapToTypeNodeArray((type as IntersectionType).types)); } if (objectFlags & (ObjectFlags.Anonymous | ObjectFlags.Mapped)) { @@ -2660,7 +2660,7 @@ namespace ts { indexerTypeNode, /*initializer*/ undefined); const typeNode = typeToTypeNodeHelper(indexInfo.type); - return createIndexSignatureDeclaration( + return createIndexSignature( /*decorators*/ undefined, indexInfo.isReadonly ? [createToken(SyntaxKind.ReadonlyKeyword)] : undefined, [indexingParameter], diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index 95878917b3d..b8be8b7bcaa 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -214,248 +214,14 @@ namespace ts { : node; } - // Type Elements - - export function createSignatureDeclaration(kind: SyntaxKind, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { - const signatureDeclaration = createSynthesizedNode(kind) as SignatureDeclaration; - signatureDeclaration.typeParameters = asNodeArray(typeParameters); - signatureDeclaration.parameters = asNodeArray(parameters); - signatureDeclaration.type = type; - return signatureDeclaration; - } - - function updateSignatureDeclaration(node: SignatureDeclaration, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { - return node.typeParameters !== typeParameters - || node.parameters !== parameters - || node.type !== type - ? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node) - : node; - } - - export function createFunctionTypeNode(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { - return createSignatureDeclaration(SyntaxKind.FunctionType, typeParameters, parameters, type) as FunctionTypeNode; - } - - export function updateFunctionTypeNode(node: FunctionTypeNode, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { - return updateSignatureDeclaration(node, typeParameters, parameters, type); - } - - export function createConstructorTypeNode(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { - return createSignatureDeclaration(SyntaxKind.ConstructorType, typeParameters, parameters, type) as ConstructorTypeNode; - } - - export function updateConstructorTypeNode(node: ConstructorTypeNode, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { - return updateSignatureDeclaration(node, typeParameters, parameters, type); - } - - export function createCallSignatureDeclaration(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { - return createSignatureDeclaration(SyntaxKind.CallSignature, typeParameters, parameters, type) as CallSignatureDeclaration; - } - - export function updateCallSignatureDeclaration(node: CallSignatureDeclaration, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { - return updateSignatureDeclaration(node, typeParameters, parameters, type); - } - - export function createConstructSignatureDeclaration(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { - return createSignatureDeclaration(SyntaxKind.ConstructSignature, typeParameters, parameters, type) as ConstructSignatureDeclaration; - } - - export function updateConstructSignatureDeclaration(node: ConstructSignatureDeclaration, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { - return updateSignatureDeclaration(node, typeParameters, parameters, type); - } - - export function createMethodSignature(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined) { - const methodSignature = createSignatureDeclaration(SyntaxKind.MethodSignature, typeParameters, parameters, type) as MethodSignature; - methodSignature.name = asName(name); - methodSignature.questionToken = questionToken; - return methodSignature; - } - - export function updateMethodSignature(node: MethodSignature, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined, name: PropertyName, questionToken: QuestionToken | undefined) { - return node.typeParameters !== typeParameters - || node.parameters !== parameters - || node.type !== type - || node.name !== name - || node.questionToken !== questionToken - ? updateNode(createMethodSignature(typeParameters, parameters, type, name, questionToken), node) - : node; - } - - // Types - - export function createKeywordTypeNode(kind: KeywordTypeNode["kind"]) { - return createSynthesizedNode(kind); - } - - export function createThisTypeNode() { - return createSynthesizedNode(SyntaxKind.ThisType); - } - - export function createLiteralTypeNode(literal: Expression) { - const literalTypeNode = createSynthesizedNode(SyntaxKind.LiteralType) as LiteralTypeNode; - literalTypeNode.literal = literal; - return literalTypeNode; - } - - export function updateLiteralTypeNode(node: LiteralTypeNode, literal: Expression) { - return node.literal !== literal - ? updateNode(createLiteralTypeNode(literal), node) - : node; - } - - export function createTypeReferenceNode(typeName: string | EntityName, typeArguments: TypeNode[] | undefined) { - const typeReference = createSynthesizedNode(SyntaxKind.TypeReference) as TypeReferenceNode; - typeReference.typeName = asName(typeName); - typeReference.typeArguments = asNodeArray(typeArguments); - return typeReference; - } - - export function updateTypeReferenceNode(node: TypeReferenceNode, typeName: EntityName, typeArguments: NodeArray | undefined) { - return node.typeName !== typeName - || node.typeArguments !== typeArguments - ? updateNode(createTypeReferenceNode(typeName, typeArguments), node) - : node; - } - - export function createTypePredicateNode(parameterName: Identifier | ThisTypeNode | string, type: TypeNode) { - const typePredicateNode = createSynthesizedNode(SyntaxKind.TypePredicate) as TypePredicateNode; - typePredicateNode.parameterName = asName(parameterName); - typePredicateNode.type = type; - return typePredicateNode; - } - - export function updateTypePredicateNode(node: TypePredicateNode, parameterName: Identifier | ThisTypeNode, type: TypeNode) { - return node.parameterName !== parameterName - || node.type !== type - ? updateNode(createTypePredicateNode(parameterName, type), node) - : node; - } - - export function createTypeQueryNode(exprName: EntityName) { - const typeQueryNode = createSynthesizedNode(SyntaxKind.TypeQuery) as TypeQueryNode; - typeQueryNode.exprName = exprName; - return typeQueryNode; - } - - export function updateTypeQueryNode(node: TypeQueryNode, exprName: EntityName) { - return node.exprName !== exprName ? updateNode(createTypeQueryNode(exprName), node) : node; - } - - export function createArrayTypeNode(elementType: TypeNode) { - const arrayTypeNode = createSynthesizedNode(SyntaxKind.ArrayType) as ArrayTypeNode; - arrayTypeNode.elementType = elementType; - return arrayTypeNode; - } - - export function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode { - return node.elementType !== elementType - ? updateNode(createArrayTypeNode(elementType), node) - : node; - } - - export function createUnionOrIntersectionTypeNode(kind: SyntaxKind.UnionType, types: TypeNode[]): UnionTypeNode; - export function createUnionOrIntersectionTypeNode(kind: SyntaxKind.IntersectionType, types: TypeNode[]): IntersectionTypeNode; - export function createUnionOrIntersectionTypeNode(kind: SyntaxKind.UnionType | SyntaxKind.IntersectionType, types: TypeNode[]): UnionOrIntersectionTypeNode; - export function createUnionOrIntersectionTypeNode(kind: SyntaxKind.UnionType | SyntaxKind.IntersectionType, types: TypeNode[]) { - const unionTypeNode = createSynthesizedNode(kind) as UnionTypeNode | IntersectionTypeNode; - unionTypeNode.types = createNodeArray(types); - return unionTypeNode; - } - - export function updateUnionOrIntersectionTypeNode(node: UnionOrIntersectionTypeNode, types: NodeArray) { - return node.types !== types - ? updateNode(createUnionOrIntersectionTypeNode(node.kind, types), node) - : node; - } - - export function createParenthesizedType(type: TypeNode) { - const node = createSynthesizedNode(SyntaxKind.ParenthesizedType); - node.type = type; - return node; - } - - export function updateParenthesizedType(node: ParenthesizedTypeNode, type: TypeNode) { - return node.type !== type - ? updateNode(createParenthesizedType(type), node) - : node; - } - - export function createTypeLiteralNode(members: TypeElement[]) { - const typeLiteralNode = createSynthesizedNode(SyntaxKind.TypeLiteral) as TypeLiteralNode; - typeLiteralNode.members = createNodeArray(members); - return typeLiteralNode; - } - - export function updateTypeLiteralNode(node: TypeLiteralNode, members: NodeArray) { - return node.members !== members - ? updateNode(createTypeLiteralNode(members), node) - : node; - } - - export function createTupleTypeNode(elementTypes: TypeNode[]) { - const tupleTypeNode = createSynthesizedNode(SyntaxKind.TupleType) as TupleTypeNode; - tupleTypeNode.elementTypes = createNodeArray(elementTypes); - return tupleTypeNode; - } - - export function updateTypleTypeNode(node: TupleTypeNode, elementTypes: TypeNode[]) { - return node.elementTypes !== elementTypes - ? updateNode(createTupleTypeNode(elementTypes), node) - : node; - } - - export function createMappedTypeNode(readonlyToken: ReadonlyToken | undefined, typeParameter: TypeParameterDeclaration, questionToken: QuestionToken | undefined, type: TypeNode | undefined): MappedTypeNode { - const mappedTypeNode = createSynthesizedNode(SyntaxKind.MappedType) as MappedTypeNode; - mappedTypeNode.readonlyToken = readonlyToken; - mappedTypeNode.typeParameter = typeParameter; - mappedTypeNode.questionToken = questionToken; - mappedTypeNode.type = type; - return mappedTypeNode; - } - - export function updateMappedTypeNode(node: MappedTypeNode, readonlyToken: ReadonlyToken | undefined, typeParameter: TypeParameterDeclaration, questionToken: QuestionToken | undefined, type: TypeNode | undefined): MappedTypeNode { - return node.readonlyToken !== readonlyToken - || node.typeParameter !== typeParameter - || node.questionToken !== questionToken - || node.type !== type - ? updateNode(createMappedTypeNode(readonlyToken, typeParameter, questionToken, type), node) - : node; - } - - export function createTypeOperatorNode(type: TypeNode) { - const typeOperatorNode = createSynthesizedNode(SyntaxKind.TypeOperator) as TypeOperatorNode; - typeOperatorNode.operator = SyntaxKind.KeyOfKeyword; - typeOperatorNode.type = type; - return typeOperatorNode; - } - - export function updateTypeOperatorNode(node: TypeOperatorNode, type: TypeNode) { - return node.type !== type ? updateNode(createTypeOperatorNode(type), node) : node; - } - - export function createIndexedAccessTypeNode(objectType: TypeNode, indexType: TypeNode) { - const indexedAccessTypeNode = createSynthesizedNode(SyntaxKind.IndexedAccessType) as IndexedAccessTypeNode; - indexedAccessTypeNode.objectType = objectType; - indexedAccessTypeNode.indexType = indexType; - return indexedAccessTypeNode; - } - - export function updateIndexedAccessTypeNode(node: IndexedAccessTypeNode, objectType: TypeNode, indexType: TypeNode) { - return node.objectType !== objectType - || node.indexType !== indexType - ? updateNode(createIndexedAccessTypeNode(objectType, indexType), node) - : node; - } - - // Type Declarations + // Signature elements export function createTypeParameterDeclaration(name: string | Identifier, constraint: TypeNode | undefined, defaultType: TypeNode | undefined) { - const typeParameter = createSynthesizedNode(SyntaxKind.TypeParameter) as TypeParameterDeclaration; - typeParameter.name = asName(name); - typeParameter.constraint = constraint; - typeParameter.default = defaultType; - - return typeParameter; + const node = createSynthesizedNode(SyntaxKind.TypeParameter) as TypeParameterDeclaration; + node.name = asName(name); + node.constraint = constraint; + node.default = defaultType; + return node; } export function updateTypeParameterDeclaration(node: TypeParameterDeclaration, name: Identifier, constraint: TypeNode | undefined, defaultType: TypeNode | undefined) { @@ -466,46 +232,6 @@ namespace ts { : node; } - // Signature elements - - export function createPropertySignature(name: PropertyName | string, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined): PropertySignature { - const propertySignature = createSynthesizedNode(SyntaxKind.PropertySignature) as PropertySignature; - propertySignature.name = asName(name); - propertySignature.questionToken = questionToken; - propertySignature.type = type; - propertySignature.initializer = initializer; - return propertySignature; - } - - export function updatePropertySignature(node: PropertySignature, name: PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) { - return node.name !== name - || node.questionToken !== questionToken - || node.type !== type - || node.initializer !== initializer - ? updateNode(createPropertySignature(name, questionToken, type, initializer), node) - : node; - } - - export function createIndexSignatureDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, parameters: ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { - const indexSignature = createSynthesizedNode(SyntaxKind.IndexSignature) as IndexSignatureDeclaration; - indexSignature.decorators = asNodeArray(decorators); - indexSignature.modifiers = asNodeArray(modifiers); - indexSignature.parameters = createNodeArray(parameters); - indexSignature.type = type; - return indexSignature; - } - - export function updateIndexSignatureDeclaration(node: IndexSignatureDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, parameters: ParameterDeclaration[], type: TypeNode) { - return node.parameters !== parameters - || node.type !== type - || node.decorators !== decorators - || node.modifiers !== modifiers - ? updateNode(createIndexSignatureDeclaration(decorators, modifiers, parameters, type), node) - : node; - } - - // Signature elements - export function createParameter(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, dotDotDotToken: DotDotDotToken | undefined, name: string | BindingName, questionToken?: QuestionToken, type?: TypeNode, initializer?: Expression) { const node = createSynthesizedNode(SyntaxKind.Parameter); node.decorators = asNodeArray(decorators); @@ -542,7 +268,26 @@ namespace ts { : node; } - // Type members + + // Type Elements + + export function createPropertySignature(name: PropertyName | string, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined): PropertySignature { + const node = createSynthesizedNode(SyntaxKind.PropertySignature) as PropertySignature; + node.name = asName(name); + node.questionToken = questionToken; + node.type = type; + node.initializer = initializer; + return node; + } + + export function updatePropertySignature(node: PropertySignature, name: PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression | undefined) { + return node.name !== name + || node.questionToken !== questionToken + || node.type !== type + || node.initializer !== initializer + ? updateNode(createPropertySignature(name, questionToken, type, initializer), node) + : node; + } export function createProperty(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined, type: TypeNode | undefined, initializer: Expression) { const node = createSynthesizedNode(SyntaxKind.PropertyDeclaration); @@ -565,7 +310,24 @@ namespace ts { : node; } - export function createMethodDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, asteriskToken: AsteriskToken | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined, body: Block | undefined) { + export function createMethodSignature(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined) { + const node = createSignatureDeclaration(SyntaxKind.MethodSignature, typeParameters, parameters, type) as MethodSignature; + node.name = asName(name); + node.questionToken = questionToken; + return node; + } + + export function updateMethodSignature(node: MethodSignature, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined, name: PropertyName, questionToken: QuestionToken | undefined) { + return node.typeParameters !== typeParameters + || node.parameters !== parameters + || node.type !== type + || node.name !== name + || node.questionToken !== questionToken + ? updateNode(createMethodSignature(typeParameters, parameters, type, name, questionToken), node) + : node; + } + + export function createMethod(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, asteriskToken: AsteriskToken | undefined, name: string | PropertyName, questionToken: QuestionToken | undefined, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined, body: Block | undefined) { const node = createSynthesizedNode(SyntaxKind.MethodDeclaration); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); @@ -588,7 +350,7 @@ namespace ts { || node.parameters !== parameters || node.type !== type || node.body !== body - ? updateNode(createMethodDeclaration(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node) + ? updateNode(createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node) : node; } @@ -656,6 +418,254 @@ namespace ts { : node; } + export function createCallSignature(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { + return createSignatureDeclaration(SyntaxKind.CallSignature, typeParameters, parameters, type) as CallSignatureDeclaration; + } + + export function updateCallSignature(node: CallSignatureDeclaration, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { + return updateSignatureDeclaration(node, typeParameters, parameters, type); + } + + export function createConstructSignature(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { + return createSignatureDeclaration(SyntaxKind.ConstructSignature, typeParameters, parameters, type) as ConstructSignatureDeclaration; + } + + export function updateConstructSignature(node: ConstructSignatureDeclaration, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { + return updateSignatureDeclaration(node, typeParameters, parameters, type); + } + + export function createIndexSignature(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, parameters: ParameterDeclaration[], type: TypeNode): IndexSignatureDeclaration { + const node = createSynthesizedNode(SyntaxKind.IndexSignature) as IndexSignatureDeclaration; + node.decorators = asNodeArray(decorators); + node.modifiers = asNodeArray(modifiers); + node.parameters = createNodeArray(parameters); + node.type = type; + return node; + } + + export function updateIndexSignature(node: IndexSignatureDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, parameters: ParameterDeclaration[], type: TypeNode) { + return node.parameters !== parameters + || node.type !== type + || node.decorators !== decorators + || node.modifiers !== modifiers + ? updateNode(createIndexSignature(decorators, modifiers, parameters, type), node) + : node; + } + + /* @internal */ + export function createSignatureDeclaration(kind: SyntaxKind, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { + const node = createSynthesizedNode(kind) as SignatureDeclaration; + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + return node; + } + + function updateSignatureDeclaration(node: T, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined): T { + return node.typeParameters !== typeParameters + || node.parameters !== parameters + || node.type !== type + ? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node) + : node; + } + + // Types + + export function createKeywordTypeNode(kind: KeywordTypeNode["kind"]) { + return createSynthesizedNode(kind); + } + + export function createTypePredicateNode(parameterName: Identifier | ThisTypeNode | string, type: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.TypePredicate) as TypePredicateNode; + node.parameterName = asName(parameterName); + node.type = type; + return node; + } + + export function updateTypePredicateNode(node: TypePredicateNode, parameterName: Identifier | ThisTypeNode, type: TypeNode) { + return node.parameterName !== parameterName + || node.type !== type + ? updateNode(createTypePredicateNode(parameterName, type), node) + : node; + } + + export function createTypeReferenceNode(typeName: string | EntityName, typeArguments: TypeNode[] | undefined) { + const node = createSynthesizedNode(SyntaxKind.TypeReference) as TypeReferenceNode; + node.typeName = asName(typeName); + node.typeArguments = asNodeArray(typeArguments); + return node; + } + + export function updateTypeReferenceNode(node: TypeReferenceNode, typeName: EntityName, typeArguments: NodeArray | undefined) { + return node.typeName !== typeName + || node.typeArguments !== typeArguments + ? updateNode(createTypeReferenceNode(typeName, typeArguments), node) + : node; + } + + export function createFunctionTypeNode(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { + return createSignatureDeclaration(SyntaxKind.FunctionType, typeParameters, parameters, type) as FunctionTypeNode; + } + + export function updateFunctionTypeNode(node: FunctionTypeNode, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { + return updateSignatureDeclaration(node, typeParameters, parameters, type); + } + + export function createConstructorTypeNode(typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined) { + return createSignatureDeclaration(SyntaxKind.ConstructorType, typeParameters, parameters, type) as ConstructorTypeNode; + } + + export function updateConstructorTypeNode(node: ConstructorTypeNode, typeParameters: NodeArray | undefined, parameters: NodeArray, type: TypeNode | undefined) { + return updateSignatureDeclaration(node, typeParameters, parameters, type); + } + + export function createTypeQueryNode(exprName: EntityName) { + const node = createSynthesizedNode(SyntaxKind.TypeQuery) as TypeQueryNode; + node.exprName = exprName; + return node; + } + + export function updateTypeQueryNode(node: TypeQueryNode, exprName: EntityName) { + return node.exprName !== exprName + ? updateNode(createTypeQueryNode(exprName), node) + : node; + } + + export function createTypeLiteralNode(members: TypeElement[]) { + const node = createSynthesizedNode(SyntaxKind.TypeLiteral) as TypeLiteralNode; + node.members = createNodeArray(members); + return node; + } + + export function updateTypeLiteralNode(node: TypeLiteralNode, members: NodeArray) { + return node.members !== members + ? updateNode(createTypeLiteralNode(members), node) + : node; + } + + export function createArrayTypeNode(elementType: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.ArrayType) as ArrayTypeNode; + node.elementType = elementType; + return node; + } + + export function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode { + return node.elementType !== elementType + ? updateNode(createArrayTypeNode(elementType), node) + : node; + } + + export function createTupleTypeNode(elementTypes: TypeNode[]) { + const node = createSynthesizedNode(SyntaxKind.TupleType) as TupleTypeNode; + node.elementTypes = createNodeArray(elementTypes); + return node; + } + + export function updateTypleTypeNode(node: TupleTypeNode, elementTypes: TypeNode[]) { + return node.elementTypes !== elementTypes + ? updateNode(createTupleTypeNode(elementTypes), node) + : node; + } + + export function createUnionTypeNode(types: TypeNode[]): UnionTypeNode { + return createUnionOrIntersectionTypeNode(SyntaxKind.UnionType, types); + } + + export function updateUnionTypeNode(node: UnionTypeNode, types: NodeArray) { + return updateUnionOrIntersectionTypeNode(node, types); + } + + export function createIntersectionTypeNode(types: TypeNode[]): IntersectionTypeNode { + return createUnionOrIntersectionTypeNode(SyntaxKind.IntersectionType, types); + } + + export function updateIntersectionTypeNode(node: IntersectionTypeNode, types: NodeArray) { + return updateUnionOrIntersectionTypeNode(node, types); + } + + export function createUnionOrIntersectionTypeNode(kind: SyntaxKind.UnionType | SyntaxKind.IntersectionType, types: TypeNode[]) { + const node = createSynthesizedNode(kind) as UnionTypeNode | IntersectionTypeNode; + node.types = createNodeArray(types); + return node; + } + + function updateUnionOrIntersectionTypeNode(node: T, types: NodeArray): T { + return node.types !== types + ? updateNode(createUnionOrIntersectionTypeNode(node.kind, types), node) + : node; + } + + export function createParenthesizedType(type: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.ParenthesizedType); + node.type = type; + return node; + } + + export function updateParenthesizedType(node: ParenthesizedTypeNode, type: TypeNode) { + return node.type !== type + ? updateNode(createParenthesizedType(type), node) + : node; + } + + export function createThisTypeNode() { + return createSynthesizedNode(SyntaxKind.ThisType); + } + + export function createTypeOperatorNode(type: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.TypeOperator) as TypeOperatorNode; + node.operator = SyntaxKind.KeyOfKeyword; + node.type = type; + return node; + } + + export function updateTypeOperatorNode(node: TypeOperatorNode, type: TypeNode) { + return node.type !== type ? updateNode(createTypeOperatorNode(type), node) : node; + } + + export function createIndexedAccessTypeNode(objectType: TypeNode, indexType: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.IndexedAccessType) as IndexedAccessTypeNode; + node.objectType = objectType; + node.indexType = indexType; + return node; + } + + export function updateIndexedAccessTypeNode(node: IndexedAccessTypeNode, objectType: TypeNode, indexType: TypeNode) { + return node.objectType !== objectType + || node.indexType !== indexType + ? updateNode(createIndexedAccessTypeNode(objectType, indexType), node) + : node; + } + + export function createMappedTypeNode(readonlyToken: ReadonlyToken | undefined, typeParameter: TypeParameterDeclaration, questionToken: QuestionToken | undefined, type: TypeNode | undefined): MappedTypeNode { + const node = createSynthesizedNode(SyntaxKind.MappedType) as MappedTypeNode; + node.readonlyToken = readonlyToken; + node.typeParameter = typeParameter; + node.questionToken = questionToken; + node.type = type; + return node; + } + + export function updateMappedTypeNode(node: MappedTypeNode, readonlyToken: ReadonlyToken | undefined, typeParameter: TypeParameterDeclaration, questionToken: QuestionToken | undefined, type: TypeNode | undefined): MappedTypeNode { + return node.readonlyToken !== readonlyToken + || node.typeParameter !== typeParameter + || node.questionToken !== questionToken + || node.type !== type + ? updateNode(createMappedTypeNode(readonlyToken, typeParameter, questionToken, type), node) + : node; + } + + export function createLiteralTypeNode(literal: Expression) { + const node = createSynthesizedNode(SyntaxKind.LiteralType) as LiteralTypeNode; + node.literal = literal; + return node; + } + + export function updateLiteralTypeNode(node: LiteralTypeNode, literal: Expression) { + return node.literal !== literal + ? updateNode(createLiteralTypeNode(literal), node) + : node; + } + // Binding Patterns export function createObjectBindingPattern(elements: BindingElement[]) { @@ -705,10 +715,7 @@ namespace ts { export function createArrayLiteral(elements?: Expression[], multiLine?: boolean) { const node = createSynthesizedNode(SyntaxKind.ArrayLiteralExpression); node.elements = parenthesizeListElements(createNodeArray(elements)); - if (multiLine) { - node.multiLine = true; - } - + if (multiLine) node.multiLine = true; return node; } @@ -721,9 +728,7 @@ namespace ts { export function createObjectLiteral(properties?: ObjectLiteralElementLike[], multiLine?: boolean) { const node = createSynthesizedNode(SyntaxKind.ObjectLiteralExpression); node.properties = createNodeArray(properties); - if (multiLine) { - node.multiLine = true; - } + if (multiLine) node.multiLine = true; return node; } @@ -773,9 +778,9 @@ namespace ts { } export function updateCall(node: CallExpression, expression: Expression, typeArguments: TypeNode[] | undefined, argumentsArray: Expression[]) { - return expression !== node.expression - || typeArguments !== node.typeArguments - || argumentsArray !== node.arguments + return node.expression !== expression + || node.typeArguments !== typeArguments + || node.arguments !== argumentsArray ? updateNode(createCall(expression, typeArguments, argumentsArray), node) : node; } @@ -1099,6 +1104,19 @@ namespace ts { : node; } + export function createMetaProperty(keywordToken: MetaProperty["keywordToken"], name: Identifier) { + const node = createSynthesizedNode(SyntaxKind.MetaProperty); + node.keywordToken = keywordToken; + node.name = name; + return node; + } + + export function updateMetaProperty(node: MetaProperty, name: Identifier) { + return node.name !== name + ? updateNode(createMetaProperty(node.keywordToken, name), node) + : node; + } + // Misc export function createTemplateSpan(expression: Expression, literal: TemplateMiddle | TemplateTail) { @@ -1115,6 +1133,10 @@ namespace ts { : node; } + export function createSemicolonClassElement() { + return createSynthesizedNode(SyntaxKind.SemicolonClassElement); + } + // Element export function createBlock(statements: Statement[], multiLine?: boolean): Block { @@ -1125,7 +1147,7 @@ namespace ts { } export function updateBlock(node: Block, statements: Statement[]) { - return statements !== node.statements + return node.statements !== statements ? updateNode(createBlock(statements, node.multiLine), node) : node; } @@ -1145,35 +1167,6 @@ namespace ts { : node; } - export function createVariableDeclarationList(declarations: VariableDeclaration[], flags?: NodeFlags) { - const node = createSynthesizedNode(SyntaxKind.VariableDeclarationList); - node.flags |= flags; - node.declarations = createNodeArray(declarations); - return node; - } - - export function updateVariableDeclarationList(node: VariableDeclarationList, declarations: VariableDeclaration[]) { - return node.declarations !== declarations - ? updateNode(createVariableDeclarationList(declarations, node.flags), node) - : node; - } - - export function createVariableDeclaration(name: string | BindingName, type?: TypeNode, initializer?: Expression) { - const node = createSynthesizedNode(SyntaxKind.VariableDeclaration); - node.name = asName(name); - node.type = type; - node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined; - return node; - } - - export function updateVariableDeclaration(node: VariableDeclaration, name: BindingName, type: TypeNode | undefined, initializer: Expression | undefined) { - return node.name !== name - || node.type !== type - || node.initializer !== initializer - ? updateNode(createVariableDeclaration(name, type, initializer), node) - : node; - } - export function createEmptyStatement() { return createSynthesizedNode(SyntaxKind.EmptyStatement); } @@ -1392,6 +1385,39 @@ namespace ts { : node; } + export function createDebuggerStatement() { + return createSynthesizedNode(SyntaxKind.DebuggerStatement); + } + + export function createVariableDeclaration(name: string | BindingName, type?: TypeNode, initializer?: Expression) { + const node = createSynthesizedNode(SyntaxKind.VariableDeclaration); + node.name = asName(name); + node.type = type; + node.initializer = initializer !== undefined ? parenthesizeExpressionForList(initializer) : undefined; + return node; + } + + export function updateVariableDeclaration(node: VariableDeclaration, name: BindingName, type: TypeNode | undefined, initializer: Expression | undefined) { + return node.name !== name + || node.type !== type + || node.initializer !== initializer + ? updateNode(createVariableDeclaration(name, type, initializer), node) + : node; + } + + export function createVariableDeclarationList(declarations: VariableDeclaration[], flags?: NodeFlags) { + const node = createSynthesizedNode(SyntaxKind.VariableDeclarationList); + node.flags |= flags & NodeFlags.BlockScoped; + node.declarations = createNodeArray(declarations); + return node; + } + + export function updateVariableDeclarationList(node: VariableDeclarationList, declarations: VariableDeclaration[]) { + return node.declarations !== declarations + ? updateNode(createVariableDeclarationList(declarations, node.flags), node) + : node; + } + export function createFunctionDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, asteriskToken: AsteriskToken | undefined, name: string | Identifier | undefined, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], type: TypeNode | undefined, body: Block | undefined) { const node = createSynthesizedNode(SyntaxKind.FunctionDeclaration); node.decorators = asNodeArray(decorators); @@ -1462,6 +1488,22 @@ namespace ts { : node; } + export function createTypeAliasDeclaration(name: string | Identifier, typeParameters: TypeParameterDeclaration[] | undefined, type: TypeNode) { + const node = createSynthesizedNode(SyntaxKind.TypeAliasDeclaration); + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.type = type; + return node; + } + + export function updateTypeAliasDeclaration(node: TypeAliasDeclaration, name: Identifier, typeParameters: TypeParameterDeclaration[] | undefined, type: TypeNode) { + return node.name !== name + || node.typeParameters !== typeParameters + || node.type !== type + ? updateNode(createTypeAliasDeclaration(name, typeParameters, type), node) + : node; + } + export function createEnumDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: string | Identifier, members: EnumMember[]) { const node = createSynthesizedNode(SyntaxKind.EnumDeclaration); node.decorators = asNodeArray(decorators); @@ -1482,7 +1524,7 @@ namespace ts { export function createModuleDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: ModuleName, body: ModuleBody | undefined, flags?: NodeFlags) { const node = createSynthesizedNode(SyntaxKind.ModuleDeclaration); - node.flags |= flags; + node.flags |= flags & (NodeFlags.Namespace | NodeFlags.NestedNamespace | NodeFlags.GlobalAugmentation); node.decorators = asNodeArray(decorators); node.modifiers = asNodeArray(modifiers); node.name = name; @@ -1523,6 +1565,18 @@ namespace ts { : node; } + export function createNamespaceExportDeclaration(name: string | Identifier) { + const node = createSynthesizedNode(SyntaxKind.NamespaceExportDeclaration); + node.name = asName(name); + return node; + } + + export function updateNamespaceExportDeclaration(node: NamespaceExportDeclaration, name: Identifier) { + return node.name !== name + ? updateNode(createNamespaceExportDeclaration(name), node) + : node; + } + export function createImportEqualsDeclaration(decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, name: string | Identifier, moduleReference: ModuleReference) { const node = createSynthesizedNode(SyntaxKind.ImportEqualsDeclaration); node.decorators = asNodeArray(decorators); @@ -1553,7 +1607,8 @@ namespace ts { export function updateImportDeclaration(node: ImportDeclaration, decorators: Decorator[] | undefined, modifiers: Modifier[] | undefined, importClause: ImportClause | undefined, moduleSpecifier: Expression | undefined) { return node.decorators !== decorators || node.modifiers !== modifiers - || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier + || node.importClause !== importClause + || node.moduleSpecifier !== moduleSpecifier ? updateNode(createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier), node) : node; } @@ -1743,19 +1798,6 @@ namespace ts { : node; } - export function createJsxAttributes(properties: JsxAttributeLike[]) { - const jsxAttributes = createSynthesizedNode(SyntaxKind.JsxAttributes); - jsxAttributes.properties = createNodeArray(properties); - return jsxAttributes; - } - - export function updateJsxAttributes(jsxAttributes: JsxAttributes, properties: JsxAttributeLike[]) { - if (jsxAttributes.properties !== properties) { - return updateNode(createJsxAttributes(properties), jsxAttributes); - } - return jsxAttributes; - } - export function createJsxAttribute(name: Identifier, initializer: StringLiteral | JsxExpression) { const node = createSynthesizedNode(SyntaxKind.JsxAttribute); node.name = name; @@ -1770,6 +1812,18 @@ namespace ts { : node; } + export function createJsxAttributes(properties: JsxAttributeLike[]) { + const node = createSynthesizedNode(SyntaxKind.JsxAttributes); + node.properties = createNodeArray(properties); + return node; + } + + export function updateJsxAttributes(node: JsxAttributes, properties: JsxAttributeLike[]) { + return node.properties !== properties + ? updateNode(createJsxAttributes(properties), node) + : node; + } + export function createJsxSpreadAttribute(expression: Expression) { const node = createSynthesizedNode(SyntaxKind.JsxSpreadAttribute); node.expression = expression; @@ -1797,20 +1851,6 @@ namespace ts { // Clauses - export function createHeritageClause(token: HeritageClause["token"], types: ExpressionWithTypeArguments[]) { - const node = createSynthesizedNode(SyntaxKind.HeritageClause); - node.token = token; - node.types = createNodeArray(types); - return node; - } - - export function updateHeritageClause(node: HeritageClause, types: ExpressionWithTypeArguments[]) { - if (node.types !== types) { - return updateNode(createHeritageClause(node.token, types), node); - } - return node; - } - export function createCaseClause(expression: Expression, statements: Statement[]) { const node = createSynthesizedNode(SyntaxKind.CaseClause); node.expression = parenthesizeExpressionForList(expression); @@ -1819,10 +1859,10 @@ namespace ts { } export function updateCaseClause(node: CaseClause, expression: Expression, statements: Statement[]) { - if (node.expression !== expression || node.statements !== statements) { - return updateNode(createCaseClause(expression, statements), node); - } - return node; + return node.expression !== expression + || node.statements !== statements + ? updateNode(createCaseClause(expression, statements), node) + : node; } export function createDefaultClause(statements: Statement[]) { @@ -1832,12 +1872,24 @@ namespace ts { } export function updateDefaultClause(node: DefaultClause, statements: Statement[]) { - if (node.statements !== statements) { - return updateNode(createDefaultClause(statements), node); - } + return node.statements !== statements + ? updateNode(createDefaultClause(statements), node) + : node; + } + + export function createHeritageClause(token: HeritageClause["token"], types: ExpressionWithTypeArguments[]) { + const node = createSynthesizedNode(SyntaxKind.HeritageClause); + node.token = token; + node.types = createNodeArray(types); return node; } + export function updateHeritageClause(node: HeritageClause, types: ExpressionWithTypeArguments[]) { + return node.types !== types + ? updateNode(createHeritageClause(node.token, types), node) + : node; + } + export function createCatchClause(variableDeclaration: string | VariableDeclaration, block: Block) { const node = createSynthesizedNode(SyntaxKind.CatchClause); node.variableDeclaration = typeof variableDeclaration === "string" ? createVariableDeclaration(variableDeclaration) : variableDeclaration; @@ -1846,10 +1898,10 @@ namespace ts { } export function updateCatchClause(node: CatchClause, variableDeclaration: VariableDeclaration, block: Block) { - if (node.variableDeclaration !== variableDeclaration || node.block !== block) { - return updateNode(createCatchClause(variableDeclaration, block), node); - } - return node; + return node.variableDeclaration !== variableDeclaration + || node.block !== block + ? updateNode(createCatchClause(variableDeclaration, block), node) + : node; } // Property assignments @@ -1863,10 +1915,10 @@ namespace ts { } export function updatePropertyAssignment(node: PropertyAssignment, name: PropertyName, initializer: Expression) { - if (node.name !== name || node.initializer !== initializer) { - return updateNode(createPropertyAssignment(name, initializer), node); - } - return node; + return node.name !== name + || node.initializer !== initializer + ? updateNode(createPropertyAssignment(name, initializer), node) + : node; } export function createShorthandPropertyAssignment(name: string | Identifier, objectAssignmentInitializer?: Expression) { @@ -1877,10 +1929,10 @@ namespace ts { } export function updateShorthandPropertyAssignment(node: ShorthandPropertyAssignment, name: Identifier, objectAssignmentInitializer: Expression | undefined) { - if (node.name !== name || node.objectAssignmentInitializer !== objectAssignmentInitializer) { - return updateNode(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node); - } - return node; + return node.name !== name + || node.objectAssignmentInitializer !== objectAssignmentInitializer + ? updateNode(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node) + : node; } export function createSpreadAssignment(expression: Expression) { @@ -1890,10 +1942,9 @@ namespace ts { } export function updateSpreadAssignment(node: SpreadAssignment, expression: Expression) { - if (node.expression !== expression) { - return updateNode(createSpreadAssignment(expression), node); - } - return node; + return node.expression !== expression + ? updateNode(createSpreadAssignment(expression), node) + : node; } // Enum diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 57cf17f7100..327c71f8de4 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1506,7 +1506,7 @@ namespace ts { // for the same reasons we treat NewExpression as a PrimaryExpression. export interface MetaProperty extends PrimaryExpression { kind: SyntaxKind.MetaProperty; - keywordToken: SyntaxKind; + keywordToken: SyntaxKind.NewKeyword; name: Identifier; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 646a7b22e3f..22a0684fa56 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3649,7 +3649,18 @@ namespace ts { || kind === SyntaxKind.GetAccessor || kind === SyntaxKind.SetAccessor || kind === SyntaxKind.IndexSignature - || kind === SyntaxKind.SemicolonClassElement; + || kind === SyntaxKind.SemicolonClassElement + || kind === SyntaxKind.MissingDeclaration; + } + + export function isTypeElement(node: Node): node is TypeElement { + const kind = node.kind; + return kind === SyntaxKind.ConstructSignature + || kind === SyntaxKind.CallSignature + || kind === SyntaxKind.PropertySignature + || kind === SyntaxKind.MethodSignature + || kind === SyntaxKind.IndexSignature + || kind === SyntaxKind.MissingDeclaration; } export function isObjectLiteralElementLike(node: Node): node is ObjectLiteralElementLike { diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 54cea3168e1..e434dadeaf7 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -218,16 +218,7 @@ namespace ts { return node; } - switch (node.kind) { - case SyntaxKind.SemicolonClassElement: - case SyntaxKind.EmptyStatement: - case SyntaxKind.OmittedExpression: - case SyntaxKind.DebuggerStatement: - case SyntaxKind.EndOfDeclarationMarker: - case SyntaxKind.MissingDeclaration: - // No need to visit nodes with no children. - return node; - + switch (kind) { // Names case SyntaxKind.QualifiedName: return updateQualifiedName(node, @@ -238,45 +229,13 @@ namespace ts { return updateComputedPropertyName(node, visitNode((node).expression, visitor, isExpression)); - // Signatures and Signature Elements - case SyntaxKind.FunctionType: - return updateFunctionTypeNode(node, - nodesVisitor((node).typeParameters, visitor, isTypeParameter), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode)); + // Signature elements - case SyntaxKind.ConstructorType: - return updateConstructorTypeNode(node, - nodesVisitor((node).typeParameters, visitor, isTypeParameter), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.CallSignature: - return updateCallSignatureDeclaration(node, - nodesVisitor((node).typeParameters, visitor, isTypeParameter), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.ConstructSignature: - return updateConstructSignatureDeclaration(node, - nodesVisitor((node).typeParameters, visitor, isTypeParameter), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.MethodSignature: - return updateMethodSignature(node, - nodesVisitor((node).typeParameters, visitor, isTypeParameter), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode), - visitNode((node).name, visitor, isPropertyName), - visitNode((node).questionToken, tokenVisitor, isToken)); - - case SyntaxKind.IndexSignature: - return updateIndexSignatureDeclaration(node, - nodesVisitor((node).decorators, visitor, isDecorator), - nodesVisitor((node).modifiers, visitor, isModifier), - nodesVisitor((node).parameters, visitor, isParameterDeclaration), - visitNode((node).type, visitor, isTypeNode)); + case SyntaxKind.TypeParameter: + return updateTypeParameterDeclaration(node, + visitNode((node).name, visitor, isIdentifier), + visitNode((node).constraint, visitor, isTypeNode), + visitNode((node).default, visitor, isTypeNode)); case SyntaxKind.Parameter: return updateParameter(node, @@ -292,67 +251,7 @@ namespace ts { return updateDecorator(node, visitNode((node).expression, visitor, isExpression)); - // Types - - case SyntaxKind.TypeReference: - return updateTypeReferenceNode(node, - visitNode((node).typeName, visitor, isEntityName), - nodesVisitor((node).typeArguments, visitor, isTypeNode)); - - case SyntaxKind.TypePredicate: - return updateTypePredicateNode(node, - visitNode((node).parameterName, visitor), - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.TypeQuery: - return updateTypeQueryNode((node), visitNode((node).exprName, visitor, isEntityName)); - - case SyntaxKind.TypeLiteral: - return updateTypeLiteralNode((node), nodesVisitor((node).members, visitor)); - - case SyntaxKind.ArrayType: - return updateArrayTypeNode(node, visitNode((node).elementType, visitor, isTypeNode)); - - case SyntaxKind.TupleType: - return updateTypleTypeNode((node), nodesVisitor((node).elementTypes, visitor, isTypeNode)); - - case SyntaxKind.UnionType: - case SyntaxKind.IntersectionType: - return updateUnionOrIntersectionTypeNode(node, - nodesVisitor((node).types, visitor, isTypeNode)); - - case SyntaxKind.ParenthesizedType: - return updateParenthesizedType(node, - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.TypeOperator: - return updateTypeOperatorNode(node, visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.IndexedAccessType: - return updateIndexedAccessTypeNode((node), - visitNode((node).objectType, visitor, isTypeNode), - visitNode((node).indexType, visitor, isTypeNode)); - - case SyntaxKind.MappedType: - return updateMappedTypeNode((node), - visitNode((node).readonlyToken, tokenVisitor, isToken), - visitNode((node).typeParameter, visitor, isTypeParameter), - visitNode((node).questionToken, tokenVisitor, isToken), - visitNode((node).type, visitor, isTypeNode)); - - case SyntaxKind.LiteralType: - return updateLiteralTypeNode(node, - visitNode((node).literal, visitor, isExpression)); - - // Type Declarations - - case SyntaxKind.TypeParameter: - return updateTypeParameterDeclaration(node, - visitNode((node).name, visitor, isIdentifier), - visitNode((node).constraint, visitor, isTypeNode), - visitNode((node).default, visitor, isTypeNode)); - - // Type members + // Type elements case SyntaxKind.PropertySignature: return updatePropertySignature((node), @@ -369,6 +268,14 @@ namespace ts { visitNode((node).type, visitor, isTypeNode), visitNode((node).initializer, visitor, isExpression)); + case SyntaxKind.MethodSignature: + return updateMethodSignature(node, + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode), + visitNode((node).name, visitor, isPropertyName), + visitNode((node).questionToken, tokenVisitor, isToken)); + case SyntaxKind.MethodDeclaration: return updateMethod(node, nodesVisitor((node).decorators, visitor, isDecorator), @@ -405,7 +312,99 @@ namespace ts { visitParameterList((node).parameters, visitor, context, nodesVisitor), visitFunctionBody((node).body, visitor, context)); + case SyntaxKind.CallSignature: + return updateCallSignature(node, + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.ConstructSignature: + return updateConstructSignature(node, + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.IndexSignature: + return updateIndexSignature(node, + nodesVisitor((node).decorators, visitor, isDecorator), + nodesVisitor((node).modifiers, visitor, isModifier), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode)); + + // Types + + case SyntaxKind.TypePredicate: + return updateTypePredicateNode(node, + visitNode((node).parameterName, visitor), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.TypeReference: + return updateTypeReferenceNode(node, + visitNode((node).typeName, visitor, isEntityName), + nodesVisitor((node).typeArguments, visitor, isTypeNode)); + + case SyntaxKind.FunctionType: + return updateFunctionTypeNode(node, + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.ConstructorType: + return updateConstructorTypeNode(node, + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).parameters, visitor, isParameterDeclaration), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.TypeQuery: + return updateTypeQueryNode((node), + visitNode((node).exprName, visitor, isEntityName)); + + case SyntaxKind.TypeLiteral: + return updateTypeLiteralNode((node), + nodesVisitor((node).members, visitor, isTypeElement)); + + case SyntaxKind.ArrayType: + return updateArrayTypeNode(node, + visitNode((node).elementType, visitor, isTypeNode)); + + case SyntaxKind.TupleType: + return updateTypleTypeNode((node), + nodesVisitor((node).elementTypes, visitor, isTypeNode)); + + case SyntaxKind.UnionType: + return updateUnionTypeNode(node, + nodesVisitor((node).types, visitor, isTypeNode)); + + case SyntaxKind.IntersectionType: + return updateIntersectionTypeNode(node, + nodesVisitor((node).types, visitor, isTypeNode)); + + case SyntaxKind.ParenthesizedType: + return updateParenthesizedType(node, + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.TypeOperator: + return updateTypeOperatorNode(node, + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.IndexedAccessType: + return updateIndexedAccessTypeNode((node), + visitNode((node).objectType, visitor, isTypeNode), + visitNode((node).indexType, visitor, isTypeNode)); + + case SyntaxKind.MappedType: + return updateMappedTypeNode((node), + visitNode((node).readonlyToken, tokenVisitor, isToken), + visitNode((node).typeParameter, visitor, isTypeParameter), + visitNode((node).questionToken, tokenVisitor, isToken), + visitNode((node).type, visitor, isTypeNode)); + + case SyntaxKind.LiteralType: + return updateLiteralTypeNode(node, + visitNode((node).literal, visitor, isExpression)); + // Binding patterns + case SyntaxKind.ObjectBindingPattern: return updateObjectBindingPattern(node, nodesVisitor((node).elements, visitor, isBindingElement)); @@ -422,6 +421,7 @@ namespace ts { visitNode((node).initializer, visitor, isExpression)); // Expression + case SyntaxKind.ArrayLiteralExpression: return updateArrayLiteral(node, nodesVisitor((node).elements, visitor, isExpression)); @@ -500,11 +500,6 @@ namespace ts { return updateAwait(node, visitNode((node).expression, visitor, isExpression)); - case SyntaxKind.BinaryExpression: - return updateBinary(node, - visitNode((node).left, visitor, isExpression), - visitNode((node).right, visitor, isExpression)); - case SyntaxKind.PrefixUnaryExpression: return updatePrefix(node, visitNode((node).operand, visitor, isExpression)); @@ -513,6 +508,11 @@ namespace ts { return updatePostfix(node, visitNode((node).operand, visitor, isExpression)); + case SyntaxKind.BinaryExpression: + return updateBinary(node, + visitNode((node).left, visitor, isExpression), + visitNode((node).right, visitor, isExpression)); + case SyntaxKind.ConditionalExpression: return updateConditional(node, visitNode((node).condition, visitor, isExpression), @@ -555,13 +555,19 @@ namespace ts { return updateNonNullExpression(node, visitNode((node).expression, visitor, isExpression)); + case SyntaxKind.MetaProperty: + return updateMetaProperty(node, + visitNode((node).name, visitor, isIdentifier)); + // Misc + case SyntaxKind.TemplateSpan: return updateTemplateSpan(node, visitNode((node).expression, visitor, isExpression), visitNode((node).literal, visitor, isTemplateMiddleOrTemplateTail)); // Element + case SyntaxKind.Block: return updateBlock(node, nodesVisitor((node).statements, visitor, isStatement)); @@ -678,6 +684,21 @@ namespace ts { nodesVisitor((node).heritageClauses, visitor, isHeritageClause), nodesVisitor((node).members, visitor, isClassElement)); + case SyntaxKind.InterfaceDeclaration: + return updateInterfaceDeclaration(node, + nodesVisitor((node).decorators, visitor, isDecorator), + nodesVisitor((node).modifiers, visitor, isModifier), + visitNode((node).name, visitor, isIdentifier), + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + nodesVisitor((node).heritageClauses, visitor, isHeritageClause), + nodesVisitor((node).members, visitor, isTypeElement)); + + case SyntaxKind.TypeAliasDeclaration: + return updateTypeAliasDeclaration(node, + visitNode((node).name, visitor, isIdentifier), + nodesVisitor((node).typeParameters, visitor, isTypeParameter), + visitNode((node).type, visitor, isTypeNode)); + case SyntaxKind.EnumDeclaration: return updateEnumDeclaration(node, nodesVisitor((node).decorators, visitor, isDecorator), @@ -700,6 +721,10 @@ namespace ts { return updateCaseBlock(node, nodesVisitor((node).clauses, visitor, isCaseOrDefaultClause)); + case SyntaxKind.NamespaceExportDeclaration: + return updateNamespaceExportDeclaration(node, + visitNode((node).name, visitor, isIdentifier)); + case SyntaxKind.ImportEqualsDeclaration: return updateImportEqualsDeclaration(node, nodesVisitor((node).decorators, visitor, isDecorator), @@ -755,21 +780,19 @@ namespace ts { visitNode((node).name, visitor, isIdentifier)); // Module references + case SyntaxKind.ExternalModuleReference: return updateExternalModuleReference(node, visitNode((node).expression, visitor, isExpression)); // JSX + case SyntaxKind.JsxElement: return updateJsxElement(node, visitNode((node).openingElement, visitor, isJsxOpeningElement), nodesVisitor((node).children, visitor, isJsxChild), visitNode((node).closingElement, visitor, isJsxClosingElement)); - case SyntaxKind.JsxAttributes: - return updateJsxAttributes(node, - nodesVisitor((node).properties, visitor, isJsxAttributeLike)); - case SyntaxKind.JsxSelfClosingElement: return updateJsxSelfClosingElement(node, visitNode((node).tagName, visitor, isJsxTagNameExpression), @@ -789,6 +812,10 @@ namespace ts { visitNode((node).name, visitor, isIdentifier), visitNode((node).initializer, visitor, isStringLiteralOrJsxExpression)); + case SyntaxKind.JsxAttributes: + return updateJsxAttributes(node, + nodesVisitor((node).properties, visitor, isJsxAttributeLike)); + case SyntaxKind.JsxSpreadAttribute: return updateJsxSpreadAttribute(node, visitNode((node).expression, visitor, isExpression)); @@ -798,6 +825,7 @@ namespace ts { visitNode((node).expression, visitor, isExpression)); // Clauses + case SyntaxKind.CaseClause: return updateCaseClause(node, visitNode((node).expression, visitor, isExpression), @@ -817,6 +845,7 @@ namespace ts { visitNode((node).block, visitor, isBlock)); // Property assignments + case SyntaxKind.PropertyAssignment: return updatePropertyAssignment(node, visitNode((node).name, visitor, isPropertyName), @@ -848,8 +877,10 @@ namespace ts { visitNode((node).expression, visitor, isExpression)); default: + // No need to visit nodes with no children. return node; } + } /** diff --git a/src/harness/unittests/transform.ts b/src/harness/unittests/transform.ts index 71f50ed94a9..b124c380e05 100644 --- a/src/harness/unittests/transform.ts +++ b/src/harness/unittests/transform.ts @@ -68,6 +68,9 @@ namespace ts { transformers: { before: [replaceUndefinedWithVoid0], after: [replaceIdentifiersNamedOldNameWithNewName] + }, + compilerOptions: { + newLine: NewLineKind.LineFeed } }).outputText; }); diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 8e1d0ac2f29..5bb24d397d9 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -110,16 +110,16 @@ namespace ts.codefix { if (!isStatic) { const stringTypeNode = createKeywordTypeNode(SyntaxKind.StringKeyword); const indexingParameter = createParameter( - /*decorators*/ undefined, - /*modifiers*/ undefined, - /*dotDotDotToken*/ undefined, + /*decorators*/ undefined, + /*modifiers*/ undefined, + /*dotDotDotToken*/ undefined, "x", - /*questionToken*/ undefined, + /*questionToken*/ undefined, stringTypeNode, - /*initializer*/ undefined); - const indexSignature = createIndexSignatureDeclaration( - /*decorators*/ undefined, - /*modifiers*/ undefined, + /*initializer*/ undefined); + const indexSignature = createIndexSignature( + /*decorators*/ undefined, + /*modifiers*/ undefined, [indexingParameter], typeNode); diff --git a/src/services/codefixes/helpers.ts b/src/services/codefixes/helpers.ts index 0de04d7a9b9..9312e66cc48 100644 --- a/src/services/codefixes/helpers.ts +++ b/src/services/codefixes/helpers.ts @@ -200,7 +200,7 @@ namespace ts.codefix { } export function createStubbedMethod(modifiers: Modifier[], name: PropertyName, optional: boolean, typeParameters: TypeParameterDeclaration[] | undefined, parameters: ParameterDeclaration[], returnType: TypeNode | undefined) { - return createMethodDeclaration( + return createMethod( /*decorators*/ undefined, modifiers, /*asteriskToken*/ undefined, From c343dd382786b86857d91a64677e986e7cb0ff70 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Mon, 1 May 2017 18:05:50 -0700 Subject: [PATCH 14/92] Fix over agressive async delegation --- src/compiler/transformers/esnext.ts | 25 +++++---- ...ter.asyncGenerators.classMethods.es2015.js | 16 +++--- ...mitter.asyncGenerators.classMethods.es5.js | 56 ++++++++++--------- ...cGenerators.functionDeclarations.es2015.js | 16 +++--- ...syncGenerators.functionDeclarations.es5.js | 56 ++++++++++--------- ...ncGenerators.functionExpressions.es2015.js | 16 +++--- ...asyncGenerators.functionExpressions.es5.js | 56 ++++++++++--------- ...cGenerators.objectLiteralMethods.es2015.js | 16 +++--- ...syncGenerators.objectLiteralMethods.es5.js | 56 ++++++++++--------- 9 files changed, 170 insertions(+), 143 deletions(-) diff --git a/src/compiler/transformers/esnext.ts b/src/compiler/transformers/esnext.ts index 3aa5be551a6..29cdbad5e7f 100644 --- a/src/compiler/transformers/esnext.ts +++ b/src/compiler/transformers/esnext.ts @@ -126,16 +126,19 @@ namespace ts { function visitYieldExpression(node: YieldExpression) { if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator) { const expression = visitNode(node.expression, visitor, isExpression); - return updateYield( + const delegator = node.asteriskToken && updateYield( node, node.asteriskToken, - node.asteriskToken - ? createAsyncDelegatorHelper(context, expression, expression) - : createArrayLiteral( - expression - ? [createLiteral("yield"), expression] - : [createLiteral("yield")] - ) + createAsyncDelegatorHelper(context, expression, expression) + ); + return updateYield( + node, + /*asteriskToken*/ undefined, + createArrayLiteral( + delegator ? [createLiteral("await"), delegator] : + expression ? [createLiteral("yield"), expression] : + [createLiteral("yield")] + ) ); } return visitEachChild(node, visitor, context); @@ -922,9 +925,9 @@ namespace ts { scoped: false, text: ` var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; ` }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js index fbefef62d05..58a4306c113 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js @@ -124,9 +124,9 @@ class C3 { } //// [C4.js] var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -149,7 +149,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar class C4 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield* __asyncDelegator([1]); + const x = yield ["await", yield* __asyncDelegator([1])]; }); } } @@ -168,9 +168,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -180,7 +180,7 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { class C5 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })()); + const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; }); } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js index 0c58c4735a0..cb4418936be 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js @@ -260,9 +260,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -297,12 +297,15 @@ var C4 = (function () { } C4.prototype.f = function () { return __asyncGenerator(this, arguments, function f_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator([1]))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); @@ -352,9 +355,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -376,19 +379,22 @@ var C5 = (function () { } C5.prototype.f = function () { return __asyncGenerator(this, arguments, function f_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); }); })()))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, ["yield", 1]]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); }); })()))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js index daf188ba33f..a3a6baf319a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js @@ -87,9 +87,9 @@ function f3() { } //// [F4.js] var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -111,7 +111,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f4() { return __asyncGenerator(this, arguments, function* f4_1() { - const x = yield* __asyncDelegator([1]); + const x = yield ["await", yield* __asyncDelegator([1])]; }); } //// [F5.js] @@ -129,9 +129,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -140,7 +140,7 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; function f5() { return __asyncGenerator(this, arguments, function* f5_1() { - const x = yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })()); + const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; }); } //// [F6.js] diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js index 71f685e24dd..1e75fb61c2f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js @@ -214,9 +214,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -248,12 +248,15 @@ var __values = (this && this.__values) || function (o) { }; function f4() { return __asyncGenerator(this, arguments, function f4_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator([1]))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); @@ -301,9 +304,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -322,19 +325,22 @@ var __values = (this && this.__values) || function (o) { }; function f5() { return __asyncGenerator(this, arguments, function f5_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); }); })()))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, ["yield", 1]]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); }); })()))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js index bb2562db780..475445b2f0a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js @@ -87,9 +87,9 @@ const f3 = function () { }; //// [F4.js] var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -111,7 +111,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; const f4 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield* __asyncDelegator([1]); + const x = yield ["await", yield* __asyncDelegator([1])]; }); }; //// [F5.js] @@ -129,9 +129,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -140,7 +140,7 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; const f5 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })()); + const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; }); }; //// [F6.js] diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js index 1863548c141..bb94d82d7b6 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js @@ -214,9 +214,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -248,12 +248,15 @@ var __values = (this && this.__values) || function (o) { }; var f4 = function () { return __asyncGenerator(this, arguments, function () { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator([1]))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); @@ -301,9 +304,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -322,19 +325,22 @@ var __values = (this && this.__values) || function (o) { }; var f5 = function () { return __asyncGenerator(this, arguments, function () { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); }); })()))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, ["yield", 1]]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); }); })()))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js index 5a200349c02..eedbfaf5998 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js @@ -107,9 +107,9 @@ const o3 = { }; //// [O4.js] var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -132,7 +132,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar const o4 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield* __asyncDelegator([1]); + const x = yield ["await", yield* __asyncDelegator([1])]; }); } }; @@ -151,9 +151,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -163,7 +163,7 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { const o5 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })()); + const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; }); } }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js index abb3f0ca074..c108d49a26f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js @@ -234,9 +234,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -269,12 +269,15 @@ var __values = (this && this.__values) || function (o) { var o4 = { f: function () { return __asyncGenerator(this, arguments, function f_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator([1]))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); @@ -323,9 +326,9 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function settle(f, v) { c = void 0, f(v), next(); } }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw", function (e) { throw e; }), "return": verb("return", function (v) { return { value: v, done: true }; }) }, p; - return o = __asyncValues(o), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { return function (v) { return v = p && n === "throw" ? f(v) : p && v.done ? v : { value: p ? ["yield", v.value] : ["await", (o[n] || f).call(o, v)], done: false }, p = !p, v; }; } + var i, f; + return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -345,19 +348,22 @@ var __values = (this && this.__values) || function (o) { var o5 = { f: function () { return __asyncGenerator(this, arguments, function f_1() { - var x; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); }); })()))]; - case 1: - x = _a.sent(); + var x, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = ["await"]; + return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, ["yield", 1]]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); }); })()))]; + case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + case 2: + x = _b.sent(); return [2 /*return*/]; } }); From 78ece7bfb1c81207568a83c60cd76d7e61b71482 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Tue, 2 May 2017 12:02:12 +0900 Subject: [PATCH 15/92] direct isInAmbientContext --- src/compiler/binder.ts | 21 +------ .../collisionArgumentsFunction.errors.txt | 15 ++--- .../reference/collisionArgumentsFunction.js | 19 ++----- .../reference/collisionArgumentsInType.js | 2 - .../collisionArgumentsInType.symbols | 57 +++++++++---------- .../reference/collisionArgumentsInType.types | 3 - .../collisionArgumentsInterfaceMembers.js | 2 - ...collisionArgumentsInterfaceMembers.symbols | 51 ++++++++--------- .../collisionArgumentsInterfaceMembers.types | 3 - .../compiler/collisionArgumentsFunction.ts | 15 ++--- .../compiler/collisionArgumentsInType.ts | 1 - .../collisionArgumentsInterfaceMembers.ts | 1 - 12 files changed, 72 insertions(+), 118 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 759e56d449c..562a650a7f0 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -2503,27 +2503,8 @@ namespace ts { } } - function needParameterStrictModeCheck(node: Node) { - if (node.parent.kind === SyntaxKind.ConstructorType || node.parent.kind === SyntaxKind.FunctionType) { - return false; - } - - if (node.parent.parent && ( - node.parent.parent.kind === SyntaxKind.InterfaceDeclaration || - node.parent.parent.kind === SyntaxKind.TypeLiteral - )) { - return false; - } - - if (isDeclarationFile(file) || isInAmbientContext(node)) { - return false; - } - - return true; - } - function bindParameter(node: ParameterDeclaration) { - if (inStrictMode && needParameterStrictModeCheck(node)) { + if (inStrictMode && !isInAmbientContext(node)) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a // strict mode FunctionLikeDeclaration or FunctionExpression(13.1) checkStrictModeEvalOrArguments(node, node.name); diff --git a/tests/baselines/reference/collisionArgumentsFunction.errors.txt b/tests/baselines/reference/collisionArgumentsFunction.errors.txt index f5388af6a14..a557e9cbcba 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.errors.txt +++ b/tests/baselines/reference/collisionArgumentsFunction.errors.txt @@ -51,12 +51,9 @@ tests/cases/compiler/collisionArgumentsFunction.ts(30,22): error TS2396: Duplica var arguments: any; // No error } - namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error - } \ No newline at end of file + declare function f5(arguments: number, ...rest); // no codegen no error + declare function f5(arguments: string, ...rest); // no codegen no error + declare function f52(i: number, ...arguments); // no codegen no error + declare function f52(i: string, ...arguments); // no codegen no error + declare function f6(arguments: number); // no codegen no error + declare function f6(arguments: string); // no codegen no error \ No newline at end of file diff --git a/tests/baselines/reference/collisionArgumentsFunction.js b/tests/baselines/reference/collisionArgumentsFunction.js index 64cd2682a4a..c6a26baa495 100644 --- a/tests/baselines/reference/collisionArgumentsFunction.js +++ b/tests/baselines/reference/collisionArgumentsFunction.js @@ -37,15 +37,12 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error -} +declare function f5(arguments: number, ...rest); // no codegen no error +declare function f5(arguments: string, ...rest); // no codegen no error +declare function f52(i: number, ...arguments); // no codegen no error +declare function f52(i: string, ...arguments); // no codegen no error +declare function f6(arguments: number); // no codegen no error +declare function f6(arguments: string); // no codegen no error //// [collisionArgumentsFunction.js] // Functions @@ -93,7 +90,3 @@ function f42(i) { function f4NoError(arguments) { var arguments; // No error } -var strict; -(function (strict) { - "use strict"; -})(strict || (strict = {})); diff --git a/tests/baselines/reference/collisionArgumentsInType.js b/tests/baselines/reference/collisionArgumentsInType.js index e9ff629f76e..4db7c930775 100644 --- a/tests/baselines/reference/collisionArgumentsInType.js +++ b/tests/baselines/reference/collisionArgumentsInType.js @@ -1,5 +1,4 @@ //// [collisionArgumentsInType.ts] -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { @@ -16,7 +15,6 @@ var v21: { } //// [collisionArgumentsInType.js] -"use strict"; var v1; // no error - no code gen var v12; // no error - no code gen var v2; diff --git a/tests/baselines/reference/collisionArgumentsInType.symbols b/tests/baselines/reference/collisionArgumentsInType.symbols index d2ec9ce6705..94c9374c7cd 100644 --- a/tests/baselines/reference/collisionArgumentsInType.symbols +++ b/tests/baselines/reference/collisionArgumentsInType.symbols @@ -1,54 +1,53 @@ === tests/cases/compiler/collisionArgumentsInType.ts === -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen ->v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 1, 3)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 1, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 19)) +>v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 0, 3)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 0, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 0, 19)) var v12: (arguments: number, ...restParameters) => void; // no error - no code gen ->v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 2, 3)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 2, 10)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 2, 28)) +>v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 1, 3)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 10)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 1, 28)) var v2: { ->v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 3, 3)) +>v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 2, 3)) (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 5)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 3, 5)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 3, 23)) new (arguments: number, ...restParameters); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 9)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 9)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 27)) foo(arguments: number, ...restParameters); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 5, 47)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 8)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 26)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 4, 47)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 8)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 26)) prop: (arguments: number, ...restParameters) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 6, 46)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 7, 11)) ->restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 7, 29)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 5, 46)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 11)) +>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 29)) } var v21: { ->v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 9, 3)) +>v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 8, 3)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 15)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 9, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 9, 15)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 19)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 19)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 11, 34)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 18)) +>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 10, 34)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 18)) prop: (i: number, ...arguments) => void; // no error - no code gen ->prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 12, 33)) ->i : Symbol(i, Decl(collisionArgumentsInType.ts, 13, 11)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 13, 21)) +>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 11, 33)) +>i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 11)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 21)) } diff --git a/tests/baselines/reference/collisionArgumentsInType.types b/tests/baselines/reference/collisionArgumentsInType.types index 7b4c8983b4c..a8096e2e7f5 100644 --- a/tests/baselines/reference/collisionArgumentsInType.types +++ b/tests/baselines/reference/collisionArgumentsInType.types @@ -1,7 +1,4 @@ === tests/cases/compiler/collisionArgumentsInType.ts === -"use strict"; ->"use strict" : "use strict" - var v1: (i: number, ...arguments) => void; // no error - no code gen >v1 : (i: number, ...arguments: any[]) => void >i : number diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js index 34530ca2c72..a55e112b603 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.js +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.js @@ -1,5 +1,4 @@ //// [collisionArgumentsInterfaceMembers.ts] -"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen @@ -30,4 +29,3 @@ interface i3 { } //// [collisionArgumentsInterfaceMembers.js] -"use strict"; diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols index a7e14b5959e..f0a82bec521 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.symbols @@ -1,64 +1,63 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === -"use strict"; // call interface i1 { ->i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 13)) +>i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 0)) (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 3, 5)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 3, 15)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 2, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 2, 15)) } interface i12 { ->i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 4, 1)) +>i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 3, 1)) (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 6, 5)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 6, 23)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 5, 5)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 5, 23)) } interface i1NoError { ->i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 7, 1)) +>i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 6, 1)) (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 9, 5)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 8, 5)) } // new interface i2 { ->i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 10, 1)) +>i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 9, 1)) new (i: number, ...arguments); // no error - no code gen ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 14, 9)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 14, 19)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 13, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 13, 19)) } interface i21 { ->i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 15, 1)) +>i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 14, 1)) new (arguments: number, ...rest); // no error - no code gen ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 17, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 17, 27)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 16, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 16, 27)) } interface i2NoError { ->i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 18, 1)) +>i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 17, 1)) new (arguments: number); // no error ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 20, 9)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 19, 9)) } // method interface i3 { ->i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 21, 1)) +>i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 20, 1)) foo(i: number, ...arguments); // no error - no code gen ->foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 24, 14)) ->i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 25, 8)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 18)) +>foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 23, 14)) +>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 24, 8)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 24, 18)) foo1(arguments: number, ...rest); // no error - no code gen ->foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 25, 33)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 9)) ->rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 26, 27)) +>foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 24, 33)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 9)) +>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 25, 27)) fooNoError(arguments: number); // no error ->fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 26, 37)) ->arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 27, 15)) +>fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 25, 37)) +>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 15)) } diff --git a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types index 3563a25b0bd..6edb0a7ebed 100644 --- a/tests/baselines/reference/collisionArgumentsInterfaceMembers.types +++ b/tests/baselines/reference/collisionArgumentsInterfaceMembers.types @@ -1,7 +1,4 @@ === tests/cases/compiler/collisionArgumentsInterfaceMembers.ts === -"use strict"; ->"use strict" : "use strict" - // call interface i1 { >i1 : i1 diff --git a/tests/cases/compiler/collisionArgumentsFunction.ts b/tests/cases/compiler/collisionArgumentsFunction.ts index d5136d9169a..b90dee9ec11 100644 --- a/tests/cases/compiler/collisionArgumentsFunction.ts +++ b/tests/cases/compiler/collisionArgumentsFunction.ts @@ -36,12 +36,9 @@ function f4NoError(arguments: any) { // no error var arguments: any; // No error } -namespace strict { - "use strict"; - declare function f5(arguments: number, ...rest); // no codegen no error - declare function f5(arguments: string, ...rest); // no codegen no error - declare function f52(i: number, ...arguments); // no codegen no error - declare function f52(i: string, ...arguments); // no codegen no error - declare function f6(arguments: number); // no codegen no error - declare function f6(arguments: string); // no codegen no error -} \ No newline at end of file +declare function f5(arguments: number, ...rest); // no codegen no error +declare function f5(arguments: string, ...rest); // no codegen no error +declare function f52(i: number, ...arguments); // no codegen no error +declare function f52(i: string, ...arguments); // no codegen no error +declare function f6(arguments: number); // no codegen no error +declare function f6(arguments: string); // no codegen no error \ No newline at end of file diff --git a/tests/cases/compiler/collisionArgumentsInType.ts b/tests/cases/compiler/collisionArgumentsInType.ts index 13785ef669d..c9354ba0bae 100644 --- a/tests/cases/compiler/collisionArgumentsInType.ts +++ b/tests/cases/compiler/collisionArgumentsInType.ts @@ -1,4 +1,3 @@ -"use strict"; var v1: (i: number, ...arguments) => void; // no error - no code gen var v12: (arguments: number, ...restParameters) => void; // no error - no code gen var v2: { diff --git a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts index 87b6b4503ac..bfb280116e4 100644 --- a/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts +++ b/tests/cases/compiler/collisionArgumentsInterfaceMembers.ts @@ -1,4 +1,3 @@ -"use strict"; // call interface i1 { (i: number, ...arguments); // no error - no code gen From b6bd396983d50a59349f2f3ad6aa02af6f0822b6 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 2 May 2017 08:39:22 -0700 Subject: [PATCH 16/92] Fix formatting for async computed method: Allow space between 'async' and '[' --- src/services/formatting/rules.ts | 4 +- src/services/formatting/rulesMap.ts | 3 +- src/services/formatting/tokenRange.ts | 46 +++++++++++++++---- .../fourslash/formatAsyncComputedMethod.ts | 9 ++++ 4 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 tests/cases/fourslash/formatAsyncComputedMethod.ts diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index c34b5c6aa94..2c1becb8dd1 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -283,7 +283,9 @@ namespace ts.formatting { this.NoSpaceAfterDot = new Rule(RuleDescriptor.create3(SyntaxKind.DotToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); // No space before and after indexer - this.NoSpaceBeforeOpenBracket = new Rule(RuleDescriptor.create2(Shared.TokenRange.Any, SyntaxKind.OpenBracketToken), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); + this.NoSpaceBeforeOpenBracket = new Rule( + RuleDescriptor.create2(Shared.TokenRange.AnyExcept(SyntaxKind.AsyncKeyword), SyntaxKind.OpenBracketToken), + RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), RuleAction.Delete)); this.NoSpaceAfterCloseBracket = new Rule(RuleDescriptor.create3(SyntaxKind.CloseBracketToken, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBeforeBlockInFunctionDeclarationContext), RuleAction.Delete)); // Place a space before open brace in a function declaration diff --git a/src/services/formatting/rulesMap.ts b/src/services/formatting/rulesMap.ts index cd6f2e539d6..5b4eacd2c2a 100644 --- a/src/services/formatting/rulesMap.ts +++ b/src/services/formatting/rulesMap.ts @@ -41,8 +41,7 @@ namespace ts.formatting { } private FillRule(rule: Rule, rulesBucketConstructionStateList: RulesBucketConstructionState[]): void { - const specificRule = rule.Descriptor.LeftTokenRange !== Shared.TokenRange.Any && - rule.Descriptor.RightTokenRange !== Shared.TokenRange.Any; + const specificRule = rule.Descriptor.LeftTokenRange.isSpecific() && rule.Descriptor.RightTokenRange.isSpecific(); rule.Descriptor.LeftTokenRange.GetTokens().forEach((left) => { rule.Descriptor.RightTokenRange.GetTokens().forEach((right) => { diff --git a/src/services/formatting/tokenRange.ts b/src/services/formatting/tokenRange.ts index 05d7369e77f..28f22cec475 100644 --- a/src/services/formatting/tokenRange.ts +++ b/src/services/formatting/tokenRange.ts @@ -6,6 +6,7 @@ namespace ts.formatting { export interface ITokenAccess { GetTokens(): SyntaxKind[]; Contains(token: SyntaxKind): boolean; + isSpecific(): boolean; } export class TokenRangeAccess implements ITokenAccess { @@ -27,6 +28,8 @@ namespace ts.formatting { public Contains(token: SyntaxKind): boolean { return this.tokens.indexOf(token) >= 0; } + + public isSpecific() { return true; } } export class TokenValuesAccess implements ITokenAccess { @@ -43,6 +46,8 @@ namespace ts.formatting { public Contains(token: SyntaxKind): boolean { return this.tokens.indexOf(token) >= 0; } + + public isSpecific() { return true; } } export class TokenSingleValueAccess implements ITokenAccess { @@ -56,15 +61,18 @@ namespace ts.formatting { public Contains(tokenValue: SyntaxKind): boolean { return tokenValue === this.token; } + + public isSpecific() { return true; } + } + + const allTokens: SyntaxKind[] = []; + for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) { + allTokens.push(token); } export class TokenAllAccess implements ITokenAccess { public GetTokens(): SyntaxKind[] { - const result: SyntaxKind[] = []; - for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) { - result.push(token); - } - return result; + return allTokens; } public Contains(): boolean { @@ -74,6 +82,22 @@ namespace ts.formatting { public toString(): string { return "[allTokens]"; } + + public isSpecific() { return false; } + } + + export class TokenAllExceptAccess implements ITokenAccess { + constructor(readonly except: SyntaxKind) {} + + public GetTokens(): SyntaxKind[] { + return allTokens.filter(t => t !== this.except); + } + + public Contains(token: SyntaxKind): boolean { + return token !== this.except; + } + + public isSpecific() { return false; } } export class TokenRange { @@ -92,8 +116,8 @@ namespace ts.formatting { return new TokenRange(new TokenRangeAccess(f, to, except)); } - static AllTokens(): TokenRange { - return new TokenRange(new TokenAllAccess()); + static AnyExcept(token: SyntaxKind): TokenRange { + return new TokenRange(new TokenAllExceptAccess(token)); } public GetTokens(): SyntaxKind[] { @@ -108,8 +132,12 @@ namespace ts.formatting { return this.tokenAccess.toString(); } - static Any: TokenRange = TokenRange.AllTokens(); - static AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([SyntaxKind.MultiLineCommentTrivia])); + public isSpecific() { + return this.tokenAccess.isSpecific(); + } + + static Any: TokenRange = new TokenRange(new TokenAllAccess()); + static AnyIncludingMultilineComments = TokenRange.FromTokens([...allTokens, SyntaxKind.MultiLineCommentTrivia]); static Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword); static BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator); static BinaryKeywordOperators = TokenRange.FromTokens([SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword, SyntaxKind.OfKeyword, SyntaxKind.AsKeyword, SyntaxKind.IsKeyword]); diff --git a/tests/cases/fourslash/formatAsyncComputedMethod.ts b/tests/cases/fourslash/formatAsyncComputedMethod.ts new file mode 100644 index 00000000000..b0365fd35cc --- /dev/null +++ b/tests/cases/fourslash/formatAsyncComputedMethod.ts @@ -0,0 +1,9 @@ +/// + +////class C { +//// /*method*/async [0]() { } +////} + +format.document(); +goTo.marker("method"); +verify.currentLineContentIs(" async [0]() { }"); From f2b7606b123945b84d799150e4be279554712aaa Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 2 May 2017 12:49:34 -0700 Subject: [PATCH 17/92] Switch to __await sentinel, better support for return values --- src/compiler/transformers/esnext.ts | 125 +++++++------ ...ter.asyncGenerators.classMethods.es2015.js | 165 ++++++++-------- ...mitter.asyncGenerators.classMethods.es5.js | 177 +++++++++--------- ...cGenerators.functionDeclarations.es2015.js | 135 +++++++------ ...syncGenerators.functionDeclarations.es5.js | 147 +++++++-------- ...ncGenerators.functionExpressions.es2015.js | 135 +++++++------ ...asyncGenerators.functionExpressions.es5.js | 147 +++++++-------- ...cGenerators.objectLiteralMethods.es2015.js | 135 +++++++------ ...syncGenerators.objectLiteralMethods.es5.js | 147 +++++++-------- .../reference/emitter.forAwait.es2015.js | 50 +++-- .../reference/emitter.forAwait.es5.js | 110 +++++------ 11 files changed, 700 insertions(+), 773 deletions(-) diff --git a/src/compiler/transformers/esnext.ts b/src/compiler/transformers/esnext.ts index 29cdbad5e7f..133272afc3a 100644 --- a/src/compiler/transformers/esnext.ts +++ b/src/compiler/transformers/esnext.ts @@ -106,15 +106,11 @@ namespace ts { } } - function visitAwaitExpression(node: AwaitExpression) { + function visitAwaitExpression(node: AwaitExpression): Expression { if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator) { - const expression = visitNode(node.expression, visitor, isExpression); return setOriginalNode( setTextRange( - createYield( - /*asteriskToken*/ undefined, - createArrayLiteral([createLiteral("await"), expression]) - ), + createYield(createAwaitHelper(context, visitNode(node.expression, visitor, isExpression))), /*location*/ node ), node @@ -124,21 +120,26 @@ namespace ts { } function visitYieldExpression(node: YieldExpression) { - if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator) { + if (enclosingFunctionFlags & FunctionFlags.Async && enclosingFunctionFlags & FunctionFlags.Generator && node.asteriskToken) { const expression = visitNode(node.expression, visitor, isExpression); - const delegator = node.asteriskToken && updateYield( - node, - node.asteriskToken, - createAsyncDelegatorHelper(context, expression, expression) - ); - return updateYield( - node, - /*asteriskToken*/ undefined, - createArrayLiteral( - delegator ? [createLiteral("await"), delegator] : - expression ? [createLiteral("yield"), expression] : - [createLiteral("yield")] - ) + return setOriginalNode( + setTextRange( + createYield( + createAwaitHelper(context, + updateYield( + node, + node.asteriskToken, + createAsyncDelegatorHelper( + context, + createAsyncValuesHelper(context, expression, expression), + expression + ) + ) + ) + ), + node + ), + node ); } return visitEachChild(node, visitor, context); @@ -350,6 +351,10 @@ namespace ts { ); } + function awaitAsYield(expression: Expression) { + return createYield(/*asteriskToken*/ undefined, enclosingFunctionFlags & FunctionFlags.Generator ? createAwaitHelper(context, expression) : expression); + } + function transformForAwaitOfStatement(node: ForOfStatement, outermostLabeledStatement: LabeledStatement) { const expression = visitNode(node.expression, visitor, isExpression); const iterator = isIdentifier(expression) ? getGeneratedNameForNode(expression) : createTempVariable(/*recordTempVariable*/ undefined); @@ -357,16 +362,11 @@ namespace ts { const errorRecord = createUniqueName("e"); const catchVariable = getGeneratedNameForNode(errorRecord); const returnMethod = createTempVariable(/*recordTempVariable*/ undefined); - const values = createAsyncValuesHelper(context, expression, /*location*/ node.expression); - const next = createYield( - /*asteriskToken*/ undefined, - enclosingFunctionFlags & FunctionFlags.Generator - ? createArrayLiteral([ - createLiteral("await"), - createCall(createPropertyAccess(iterator, "next" ), /*typeArguments*/ undefined, []) - ]) - : createCall(createPropertyAccess(iterator, "next" ), /*typeArguments*/ undefined, []) - ); + const callValues = createAsyncValuesHelper(context, expression, /*location*/ node.expression); + const callNext = createCall(createPropertyAccess(iterator, "next" ), /*typeArguments*/ undefined, []); + const getDone = createPropertyAccess(result, "done"); + const getValue = createPropertyAccess(result, "value"); + const callReturn = createFunctionCall(returnMethod, iterator, []); hoistVariableDeclaration(errorRecord); hoistVariableDeclaration(returnMethod); @@ -377,16 +377,19 @@ namespace ts { /*initializer*/ setEmitFlags( setTextRange( createVariableDeclarationList([ - setTextRange(createVariableDeclaration(iterator, /*type*/ undefined, values), node.expression), - createVariableDeclaration(result, /*type*/ undefined, next) + setTextRange(createVariableDeclaration(iterator, /*type*/ undefined, callValues), node.expression), + createVariableDeclaration(result) ]), node.expression ), EmitFlags.NoHoisting ), - /*condition*/ createLogicalNot(createPropertyAccess(result, "done")), - /*incrementor*/ createAssignment(result, next), - /*statement*/ convertForOfStatementHead(node, createPropertyAccess(result, "value")) + /*condition*/ createComma( + createAssignment(result, awaitAsYield(callNext)), + createLogicalNot(getDone) + ), + /*incrementor*/ undefined, + /*statement*/ convertForOfStatementHead(node, awaitAsYield(getValue)) ), /*location*/ node ), @@ -424,26 +427,14 @@ namespace ts { createLogicalAnd( createLogicalAnd( result, - createLogicalNot( - createPropertyAccess(result, "done") - ) + createLogicalNot(getDone) ), createAssignment( returnMethod, createPropertyAccess(iterator, "return") ) ), - createStatement( - createYield( - /*asteriskToken*/ undefined, - enclosingFunctionFlags & FunctionFlags.Generator - ? createArrayLiteral([ - createLiteral("await"), - createFunctionCall(returnMethod, iterator, []) - ]) - : createFunctionCall(returnMethod, iterator, []) - ) - ) + createStatement(awaitAsYield(callReturn)) ), EmitFlags.SingleLine ) @@ -883,27 +874,39 @@ namespace ts { ); } + const awaitHelper: EmitHelper = { + name: "typescript:await", + scoped: false, + text: ` + var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } + ` + }; + + function createAwaitHelper(context: TransformationContext, expression: Expression) { + context.requestEmitHelper(awaitHelper); + return createCall(createIdentifier("__await"), /*typeArguments*/ undefined, [expression]); + } + const asyncGeneratorHelper: EmitHelper = { name: "typescript:asyncGenerator", scoped: false, text: ` var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; ` }; function createAsyncGeneratorHelper(context: TransformationContext, generatorFunc: FunctionExpression) { + context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncGeneratorHelper); // Mark this node as originally an async function @@ -925,16 +928,16 @@ namespace ts { scoped: false, text: ` var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; ` }; function createAsyncDelegatorHelper(context: TransformationContext, expression: Expression, location?: TextRange) { + context.requestEmitHelper(awaitHelper); context.requestEmitHelper(asyncDelegator); - context.requestEmitHelper(asyncValues); return setTextRange( createCall( getHelperName("__asyncDelegator"), diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js index 58a4306c113..2a0ca50a97b 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js @@ -61,18 +61,17 @@ class C9 extends B9 { //// [C1.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C1 { f() { @@ -81,143 +80,137 @@ class C1 { } } //// [C2.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C2 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["yield"]; + const x = yield; }); } } //// [C3.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C3 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["yield", 1]; + const x = yield 1; }); } } //// [C4.js] -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C4 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", yield* __asyncDelegator([1])]; + const x = yield __await(yield* __asyncDelegator(__asyncValues([1]))); }); } } //// [C5.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; class C5 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; + const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })()))); }); } } //// [C6.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C6 { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", 1]; + const x = yield __await(1); }); } } //// [C7.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C7 { f() { @@ -227,18 +220,17 @@ class C7 { } } //// [C8.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class C8 { g() { @@ -250,18 +242,17 @@ class C8 { } } //// [C9.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; class B9 { g() { } diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js index cb4418936be..a72f1dd27c5 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js @@ -88,18 +88,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C1 = (function () { function C1() { @@ -141,18 +140,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C2 = (function () { function C2() { @@ -162,7 +160,7 @@ var C2 = (function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield"]]; + case 0: return [4 /*yield*/]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -200,18 +198,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C3 = (function () { function C3() { @@ -221,7 +218,7 @@ var C3 = (function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -259,28 +256,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -301,9 +297,9 @@ var C4 = (function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues([1])))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -341,29 +337,28 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; if (m) return m.call(o); @@ -383,16 +378,16 @@ var C5 = (function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: _a.sent(); return [2 /*return*/]; } - }); }); })()))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + }); }); })())))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -430,18 +425,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C6 = (function () { function C6() { @@ -451,7 +445,7 @@ var C6 = (function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["await", 1]]; + case 0: return [4 /*yield*/, __await(1)]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -489,18 +483,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C7 = (function () { function C7() { @@ -542,18 +535,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var C8 = (function () { function C8() { @@ -608,18 +600,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var B9 = (function () { function B9() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js index a3a6baf319a..b25f69297d3 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js @@ -30,151 +30,144 @@ async function * f7() { //// [F1.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f1() { return __asyncGenerator(this, arguments, function* f1_1() { }); } //// [F2.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f2() { return __asyncGenerator(this, arguments, function* f2_1() { - const x = yield ["yield"]; + const x = yield; }); } //// [F3.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f3() { return __asyncGenerator(this, arguments, function* f3_1() { - const x = yield ["yield", 1]; + const x = yield 1; }); } //// [F4.js] -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f4() { return __asyncGenerator(this, arguments, function* f4_1() { - const x = yield ["await", yield* __asyncDelegator([1])]; + const x = yield __await(yield* __asyncDelegator(__asyncValues([1]))); }); } //// [F5.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; function f5() { return __asyncGenerator(this, arguments, function* f5_1() { - const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; + const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })()))); }); } //// [F6.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f6() { return __asyncGenerator(this, arguments, function* f6_1() { - const x = yield ["await", 1]; + const x = yield __await(1); }); } //// [F7.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f7() { return __asyncGenerator(this, arguments, function* f7_1() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js index 1e75fb61c2f..87d5f1a2b01 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js @@ -57,18 +57,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f1() { return __asyncGenerator(this, arguments, function f1_1() { @@ -105,25 +104,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f2() { return __asyncGenerator(this, arguments, function f2_1() { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield"]]; + case 0: return [4 /*yield*/]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -159,25 +157,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f3() { return __asyncGenerator(this, arguments, function f3_1() { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -213,28 +210,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -252,9 +248,9 @@ function f4() { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues([1])))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -290,29 +286,28 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; if (m) return m.call(o); @@ -329,16 +324,16 @@ function f5() { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: _a.sent(); return [2 /*return*/]; } - }); }); })()))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + }); }); })())))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -374,25 +369,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f6() { return __asyncGenerator(this, arguments, function f6_1() { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["await", 1]]; + case 0: return [4 /*yield*/, __await(1)]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -428,18 +422,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f7() { return __asyncGenerator(this, arguments, function f7_1() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js index 475445b2f0a..78909a55ab0 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js @@ -30,151 +30,144 @@ const f7 = async function * () { //// [F1.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f1 = function () { return __asyncGenerator(this, arguments, function* () { }); }; //// [F2.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f2 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield ["yield"]; + const x = yield; }); }; //// [F3.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f3 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield ["yield", 1]; + const x = yield 1; }); }; //// [F4.js] -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f4 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield ["await", yield* __asyncDelegator([1])]; + const x = yield __await(yield* __asyncDelegator(__asyncValues([1]))); }); }; //// [F5.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; const f5 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; + const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })()))); }); }; //// [F6.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f6 = function () { return __asyncGenerator(this, arguments, function* () { - const x = yield ["await", 1]; + const x = yield __await(1); }); }; //// [F7.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const f7 = function () { return __asyncGenerator(this, arguments, function* () { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js index bb94d82d7b6..9f4811d8af9 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js @@ -57,18 +57,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var f1 = function () { return __asyncGenerator(this, arguments, function () { @@ -105,25 +104,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var f2 = function () { return __asyncGenerator(this, arguments, function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield"]]; + case 0: return [4 /*yield*/]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -159,25 +157,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var f3 = function () { return __asyncGenerator(this, arguments, function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -213,28 +210,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -252,9 +248,9 @@ var f4 = function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues([1])))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -290,29 +286,28 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; if (m) return m.call(o); @@ -329,16 +324,16 @@ var f5 = function () { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: _a.sent(); return [2 /*return*/]; } - }); }); })()))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + }); }); })())))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -374,25 +369,24 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var f6 = function () { return __asyncGenerator(this, arguments, function () { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["await", 1]]; + case 0: return [4 /*yield*/, __await(1)]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -428,18 +422,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var f7 = function () { return __asyncGenerator(this, arguments, function () { diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js index eedbfaf5998..902197651be 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js @@ -44,18 +44,17 @@ const o7 = { //// [O1.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o1 = { f() { @@ -64,143 +63,137 @@ const o1 = { } }; //// [O2.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o2 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["yield"]; + const x = yield; }); } }; //// [O3.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o3 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["yield", 1]; + const x = yield 1; }); } }; //// [O4.js] -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o4 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", yield* __asyncDelegator([1])]; + const x = yield __await(yield* __asyncDelegator(__asyncValues([1]))); }); } }; //// [O5.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; const o5 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", yield* __asyncDelegator((function () { return __asyncGenerator(this, arguments, function* () { yield ["yield", 1]; }); })())]; + const x = yield __await(yield* __asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function* () { yield 1; }); })()))); }); } }; //// [O6.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o6 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - const x = yield ["await", 1]; + const x = yield __await(1); }); } }; //// [O7.js] +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; const o7 = { f() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js index c108d49a26f..34d970afdbe 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js @@ -71,18 +71,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var o1 = { f: function () { @@ -121,18 +120,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var o2 = { f: function () { @@ -140,7 +138,7 @@ var o2 = { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield"]]; + case 0: return [4 /*yield*/]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -177,18 +175,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var o3 = { f: function () { @@ -196,7 +193,7 @@ var o3 = { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -233,28 +230,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } -}; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; @@ -273,9 +269,9 @@ var o4 = { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator([1]))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues([1])))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -312,29 +308,28 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } -}; -var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i, f; - return o = __asyncValues(o), i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (b) { return (f = !f) ? { value: ["await", new Promise(function(r) { r(o[n](b)); })], done: n === "return" } : b.done ? b : { value: ["yield", b.value], done: false }; }; } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var __asyncValues = (this && this.__asyncIterator) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; + return i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } +}; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; if (m) return m.call(o); @@ -352,16 +347,16 @@ var o5 = { return __generator(this, function (_b) { switch (_b.label) { case 0: - _a = ["await"]; - return [5 /*yield**/, __values(__asyncDelegator((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { + _a = __await; + return [5 /*yield**/, __values(__asyncDelegator(__asyncValues((function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["yield", 1]]; + case 0: return [4 /*yield*/, 1]; case 1: _a.sent(); return [2 /*return*/]; } - }); }); })()))]; - case 1: return [4 /*yield*/, _a.concat([_b.sent()])]; + }); }); })())))]; + case 1: return [4 /*yield*/, _a.apply(void 0, [_b.sent()])]; case 2: x = _b.sent(); return [2 /*return*/]; @@ -398,18 +393,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var o6 = { f: function () { @@ -417,7 +411,7 @@ var o6 = { var x; return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, ["await", 1]]; + case 0: return [4 /*yield*/, __await(1)]; case 1: x = _a.sent(); return [2 /*return*/]; @@ -454,18 +448,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; var o7 = { f: function () { diff --git a/tests/baselines/reference/emitter.forAwait.es2015.js b/tests/baselines/reference/emitter.forAwait.es2015.js index 4bba2d06dcc..d88ed8d1a06 100644 --- a/tests/baselines/reference/emitter.forAwait.es2015.js +++ b/tests/baselines/reference/emitter.forAwait.es2015.js @@ -43,8 +43,8 @@ function f1() { return __awaiter(this, void 0, void 0, function* () { let y; try { - for (var y_1 = __asyncValues(y), y_1_1 = yield y_1.next(); !y_1_1.done; y_1_1 = yield y_1.next()) { - const x = y_1_1.value; + for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), !y_1_1.done;) { + const x = yield y_1_1.value; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } @@ -75,8 +75,8 @@ function f2() { return __awaiter(this, void 0, void 0, function* () { let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1 = yield y_1.next(); !y_1_1.done; y_1_1 = yield y_1.next()) { - x = y_1_1.value; + for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), !y_1_1.done;) { + x = yield y_1_1.value; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } @@ -95,31 +95,30 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f3() { return __asyncGenerator(this, arguments, function* f3_1() { let y; try { - for (var y_1 = __asyncValues(y), y_1_1 = yield ["await", y_1.next()]; !y_1_1.done; y_1_1 = yield ["await", y_1.next()]) { - const x = y_1_1.value; + for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { + const x = yield __await(y_1_1.value); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield ["await", _a.call(y_1)]; + if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -132,31 +131,30 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f4() { return __asyncGenerator(this, arguments, function* f4_1() { let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1 = yield ["await", y_1.next()]; !y_1_1.done; y_1_1 = yield ["await", y_1.next()]) { - x = y_1_1.value; + for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { + x = yield __await(y_1_1.value); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield ["await", _a.call(y_1)]; + if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/emitter.forAwait.es5.js b/tests/baselines/reference/emitter.forAwait.es5.js index 09b73ed21f0..fc8f5fd321d 100644 --- a/tests/baselines/reference/emitter.forAwait.es5.js +++ b/tests/baselines/reference/emitter.forAwait.es5.js @@ -74,18 +74,15 @@ function f1() { case 0: _b.trys.push([0, 6, 7, 12]); y_1 = __asyncValues(y); - return [4 /*yield*/, y_1.next()]; - case 1: - y_1_1 = _b.sent(); - _b.label = 2; + _b.label = 1; + case 1: return [4 /*yield*/, y_1.next()]; case 2: - if (!!y_1_1.done) return [3 /*break*/, 5]; - x = y_1_1.value; - _b.label = 3; - case 3: return [4 /*yield*/, y_1.next()]; - case 4: - y_1_1 = _b.sent(); - return [3 /*break*/, 2]; + if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5]; + return [4 /*yield*/, y_1_1.value]; + case 3: + x = _b.sent(); + _b.label = 4; + case 4: return [3 /*break*/, 1]; case 5: return [3 /*break*/, 12]; case 6: e_1_1 = _b.sent(); @@ -157,18 +154,15 @@ function f2() { case 0: _b.trys.push([0, 6, 7, 12]); y_1 = __asyncValues(y); - return [4 /*yield*/, y_1.next()]; - case 1: - y_1_1 = _b.sent(); - _b.label = 2; + _b.label = 1; + case 1: return [4 /*yield*/, y_1.next()]; case 2: - if (!!y_1_1.done) return [3 /*break*/, 5]; - x = y_1_1.value; - _b.label = 3; - case 3: return [4 /*yield*/, y_1.next()]; - case 4: - y_1_1 = _b.sent(); - return [3 /*break*/, 2]; + if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5]; + return [4 /*yield*/, y_1_1.value]; + case 3: + x = _b.sent(); + _b.label = 4; + case 4: return [3 /*break*/, 1]; case 5: return [3 /*break*/, 12]; case 6: e_1_1 = _b.sent(); @@ -224,18 +218,17 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f3() { return __asyncGenerator(this, arguments, function f3_1() { @@ -245,18 +238,15 @@ function f3() { case 0: _b.trys.push([0, 6, 7, 12]); y_1 = __asyncValues(y); - return [4 /*yield*/, ["await", y_1.next()]]; - case 1: - y_1_1 = _b.sent(); - _b.label = 2; + _b.label = 1; + case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!!y_1_1.done) return [3 /*break*/, 5]; - x = y_1_1.value; - _b.label = 3; - case 3: return [4 /*yield*/, ["await", y_1.next()]]; - case 4: - y_1_1 = _b.sent(); - return [3 /*break*/, 2]; + if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5]; + return [4 /*yield*/, __await(y_1_1.value)]; + case 3: + x = _b.sent(); + _b.label = 4; + case 4: return [3 /*break*/, 1]; case 5: return [3 /*break*/, 12]; case 6: e_1_1 = _b.sent(); @@ -265,7 +255,7 @@ function f3() { case 7: _b.trys.push([7, , 10, 11]); if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 9]; - return [4 /*yield*/, ["await", _a.call(y_1)]]; + return [4 /*yield*/, __await(_a.call(y_1))]; case 8: _b.sent(); _b.label = 9; @@ -312,18 +302,17 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { var m = o[Symbol.asyncIterator]; return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; +var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), q = [], c, i; - return i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { return function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]), next(); }); }; } - function next() { if (!c && q.length) resume((c = q.shift())[0], c[1]); } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(c[3], e); } } - function step(r) { r.done ? settle(c[2], r) : Promise.resolve(r.value[1]).then(r.value[0] === "yield" ? send : fulfill, reject); } - function send(value) { settle(c[2], { value: value, done: false }); } + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } - function settle(f, v) { c = void 0, f(v), next(); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; function f4() { return __asyncGenerator(this, arguments, function f4_1() { @@ -333,18 +322,15 @@ function f4() { case 0: _b.trys.push([0, 6, 7, 12]); y_1 = __asyncValues(y); - return [4 /*yield*/, ["await", y_1.next()]]; - case 1: - y_1_1 = _b.sent(); - _b.label = 2; + _b.label = 1; + case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!!y_1_1.done) return [3 /*break*/, 5]; - x = y_1_1.value; - _b.label = 3; - case 3: return [4 /*yield*/, ["await", y_1.next()]]; - case 4: - y_1_1 = _b.sent(); - return [3 /*break*/, 2]; + if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 5]; + return [4 /*yield*/, __await(y_1_1.value)]; + case 3: + x = _b.sent(); + _b.label = 4; + case 4: return [3 /*break*/, 1]; case 5: return [3 /*break*/, 12]; case 6: e_1_1 = _b.sent(); @@ -353,7 +339,7 @@ function f4() { case 7: _b.trys.push([7, , 10, 11]); if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 9]; - return [4 /*yield*/, ["await", _a.call(y_1)]]; + return [4 /*yield*/, __await(_a.call(y_1))]; case 8: _b.sent(); _b.label = 9; From 04c894888d90417949262a703c8c12b359b88bbe Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 2 May 2017 13:21:39 -0700 Subject: [PATCH 18/92] Re-use code from 'getTargetOfExportSpecifier' --- src/compiler/checker.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 34a176ac23c..ca5d65068a0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1400,10 +1400,10 @@ namespace ts { return resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias); } - function getTargetOfExportSpecifier(node: ExportSpecifier, dontResolveAlias?: boolean): Symbol { - return (node.parent.parent).moduleSpecifier ? - getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : - resolveEntityName(node.propertyName || node.name, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace, /*ignoreErrors*/ false, dontResolveAlias); + function getTargetOfExportSpecifier(node: ExportSpecifier, meaning: SymbolFlags, dontResolveAlias?: boolean) { + return node.parent.parent.moduleSpecifier ? + getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : + resolveEntityName(node.propertyName || node.name, meaning, /*ignoreErrors*/ false, dontResolveAlias); } function getTargetOfExportAssignment(node: ExportAssignment, dontResolveAlias: boolean): Symbol { @@ -1421,7 +1421,7 @@ namespace ts { case SyntaxKind.ImportSpecifier: return getTargetOfImportSpecifier(node, dontRecursivelyResolve); case SyntaxKind.ExportSpecifier: - return getTargetOfExportSpecifier(node, dontRecursivelyResolve); + return getTargetOfExportSpecifier(node, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace, dontRecursivelyResolve); case SyntaxKind.ExportAssignment: return getTargetOfExportAssignment(node, dontRecursivelyResolve); case SyntaxKind.NamespaceExportDeclaration: @@ -3721,10 +3721,7 @@ namespace ts { exportSymbol = resolveName(node.parent, node.text, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias, Diagnostics.Cannot_find_name_0, node); } else if (node.parent.kind === SyntaxKind.ExportSpecifier) { - const exportSpecifier = node.parent; - exportSymbol = (exportSpecifier.parent.parent).moduleSpecifier ? - getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : - resolveEntityName(exportSpecifier.propertyName || exportSpecifier.name, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias); + exportSymbol = getTargetOfExportSpecifier(node.parent, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias); } const result: Node[] = []; if (exportSymbol) { From f61ec7fb604a897e2bb581fc8623c39d84ff71f0 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 2 May 2017 13:36:01 -0700 Subject: [PATCH 19/92] Declare synthetic var for class extends expression Classes that extend expressions will get a synthetic var declaration for the expression. This is required for classes that extend an expression that return an intersection type. --- src/compiler/checker.ts | 2 +- src/compiler/declarationEmitter.ts | 83 +++++++++++++++++++----------- 2 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18e57303c12..dac3dce3b32 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22645,7 +22645,7 @@ namespace ts { const classType = getDeclaredTypeOfSymbol(getSymbolOfNode(node)); resolveBaseTypesOfClass(classType); const baseType = classType.resolvedBaseTypes.length ? classType.resolvedBaseTypes[0] : unknownType; - if (!baseType.symbol) { + if (!baseType.symbol && !(baseType.flags & TypeFlags.Intersection)) { writer.reportIllegalExtends(); } getSymbolDisplayBuilder().buildTypeDisplay(baseType, writer, enclosingDeclaration, flags); diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index 2bd8d5971fb..7251fec169f 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -594,12 +594,11 @@ namespace ts { emitLines(node.statements); } - // Return a temp variable name to be used in `export default` statements. + // Return a temp variable name to be used in `export default`/`export class ... extends` statements. // The temp name will be of the form _default_counter. // Note that export default is only allowed at most once in a module, so we // do not need to keep track of created temp names. - function getExportDefaultTempVariableName(): string { - const baseName = "_default"; + function getExportTempVariableName(baseName: string): string { if (!currentIdentifiers.has(baseName)) { return baseName; } @@ -613,24 +612,31 @@ namespace ts { } } + function emitTempVariableDeclaration(expr: Expression, baseName: string, diagnostic: SymbolAccessibilityDiagnostic): string { + const tempVarName = getExportTempVariableName(baseName); + if (!noDeclare) { + write("declare "); + } + write("var "); + write(tempVarName); + write(": "); + writer.getSymbolAccessibilityDiagnostic = () => diagnostic; + resolver.writeTypeOfExpression(expr, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.UseTypeAliasValue, writer); + write(";"); + writeLine(); + return tempVarName; + } + function emitExportAssignment(node: ExportAssignment) { if (node.expression.kind === SyntaxKind.Identifier) { write(node.isExportEquals ? "export = " : "export default "); writeTextOfNode(currentText, node.expression); } else { - // Expression - const tempVarName = getExportDefaultTempVariableName(); - if (!noDeclare) { - write("declare "); - } - write("var "); - write(tempVarName); - write(": "); - writer.getSymbolAccessibilityDiagnostic = getDefaultExportAccessibilityDiagnostic; - resolver.writeTypeOfExpression(node.expression, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.UseTypeAliasValue, writer); - write(";"); - writeLine(); + const tempVarName = emitTempVariableDeclaration(node.expression, "_default", { + diagnosticMessage: Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0, + errorNode: node + }); write(node.isExportEquals ? "export = " : "export default "); write(tempVarName); } @@ -644,13 +650,6 @@ namespace ts { // write each of these declarations asynchronously writeAsynchronousModuleElements(nodes); } - - function getDefaultExportAccessibilityDiagnostic(): SymbolAccessibilityDiagnostic { - return { - diagnosticMessage: Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0, - errorNode: node - }; - } } function isModuleElementVisible(node: Declaration) { @@ -1113,7 +1112,11 @@ namespace ts { else { writer.getSymbolAccessibilityDiagnostic = getHeritageClauseVisibilityError; errorNameNode = className; - resolver.writeBaseConstructorTypeOfClass(enclosingDeclaration, enclosingDeclaration, TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.UseTypeAliasValue, writer); + resolver.writeBaseConstructorTypeOfClass( + enclosingDeclaration as ClassLikeDeclaration, + enclosingDeclaration, + TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.UseTypeAliasValue, + writer); errorNameNode = undefined; } @@ -1151,21 +1154,39 @@ namespace ts { } } + const prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + const baseTypeNode = getClassExtendsHeritageClauseElement(node); + let tempVarName: string; + if (isNonNullExpression(baseTypeNode)) { + tempVarName = emitTempVariableDeclaration(baseTypeNode.expression, `_${node.name.text}_intersection_base`, { + diagnosticMessage: Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1, + errorNode: baseTypeNode, + typeName: node.name + }); + } + emitJsDocComments(node); emitModuleElementDeclarationFlags(node); if (hasModifier(node, ModifierFlags.Abstract)) { write("abstract "); } - write("class "); writeTextOfNode(currentText, node.name); - const prevEnclosingDeclaration = enclosingDeclaration; - enclosingDeclaration = node; emitTypeParameters(node.typeParameters); - const baseTypeNode = getClassExtendsHeritageClauseElement(node); if (baseTypeNode) { - node.name; - emitHeritageClause(node.name, [baseTypeNode], /*isImplementsList*/ false); + if (isNonNullExpression(baseTypeNode)) { + write(" extends "); + write(tempVarName); + if (baseTypeNode.typeArguments) { + write("<"); + emitCommaList(baseTypeNode.typeArguments, emitType); + write(">"); + } + } + else { + emitHeritageClause(node.name, [baseTypeNode], /*isImplementsList*/ false); + } } emitHeritageClause(node.name, getClassImplementsHeritageClauseElements(node), /*isImplementsList*/ true); write(" {"); @@ -1201,6 +1222,10 @@ namespace ts { enclosingDeclaration = prevEnclosingDeclaration; } + function isNonNullExpression(node: ExpressionWithTypeArguments) { + return node && !isEntityNameExpression(node.expression) && node.expression.kind !== SyntaxKind.NullKeyword; + } + function emitPropertyDeclaration(node: Declaration) { if (hasDynamicName(node)) { return; From bdb90deacb471a8aca50393f1001426b7a475234 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 2 May 2017 13:38:53 -0700 Subject: [PATCH 20/92] Update baselines --- .../declarationEmitExpressionInExtends2.js | 3 +- ...arationEmitExpressionInExtends3.errors.txt | 4 +- ...arationEmitExpressionInExtends4.errors.txt | 11 +-- ...xportClassExtendingIntersection.errors.txt | 39 --------- .../exportClassExtendingIntersection.js | 7 ++ .../exportClassExtendingIntersection.symbols | 79 +++++++++++++++++ .../exportClassExtendingIntersection.types | 84 +++++++++++++++++++ .../reference/mixinAccessModifiers.errors.txt | 20 +---- .../reference/mixinAccessModifiers.js | 63 ++++++++++++++ 9 files changed, 242 insertions(+), 68 deletions(-) delete mode 100644 tests/baselines/reference/exportClassExtendingIntersection.errors.txt create mode 100644 tests/baselines/reference/exportClassExtendingIntersection.symbols create mode 100644 tests/baselines/reference/exportClassExtendingIntersection.types diff --git a/tests/baselines/reference/declarationEmitExpressionInExtends2.js b/tests/baselines/reference/declarationEmitExpressionInExtends2.js index 301d935a1db..ed3bc9d96f3 100644 --- a/tests/baselines/reference/declarationEmitExpressionInExtends2.js +++ b/tests/baselines/reference/declarationEmitExpressionInExtends2.js @@ -45,5 +45,6 @@ declare class C { y: U; } declare function getClass(c: T): typeof C; -declare class MyClass extends C { +declare var _MyClass_intersection_base: typeof C; +declare class MyClass extends _MyClass_intersection_base { } diff --git a/tests/baselines/reference/declarationEmitExpressionInExtends3.errors.txt b/tests/baselines/reference/declarationEmitExpressionInExtends3.errors.txt index 636085215ac..4864a3bcdc2 100644 --- a/tests/baselines/reference/declarationEmitExpressionInExtends3.errors.txt +++ b/tests/baselines/reference/declarationEmitExpressionInExtends3.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/declarationEmitExpressionInExtends3.ts(28,30): error TS4020: 'extends' clause of exported class 'MyClass' has or is using private name 'LocalClass'. -tests/cases/compiler/declarationEmitExpressionInExtends3.ts(36,31): error TS4020: 'extends' clause of exported class 'MyClass3' has or is using private name 'LocalInterface'. +tests/cases/compiler/declarationEmitExpressionInExtends3.ts(36,75): error TS4020: 'extends' clause of exported class 'MyClass3' has or is using private name 'LocalInterface'. ==== tests/cases/compiler/declarationEmitExpressionInExtends3.ts (2 errors) ==== @@ -41,7 +41,7 @@ tests/cases/compiler/declarationEmitExpressionInExtends3.ts(36,31): error TS4020 export class MyClass3 extends getExportedClass(undefined) { // Error LocalInterface is inaccisble - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~~~~~ !!! error TS4020: 'extends' clause of exported class 'MyClass3' has or is using private name 'LocalInterface'. } diff --git a/tests/baselines/reference/declarationEmitExpressionInExtends4.errors.txt b/tests/baselines/reference/declarationEmitExpressionInExtends4.errors.txt index b2e3eb58d54..54905212836 100644 --- a/tests/baselines/reference/declarationEmitExpressionInExtends4.errors.txt +++ b/tests/baselines/reference/declarationEmitExpressionInExtends4.errors.txt @@ -1,13 +1,12 @@ tests/cases/compiler/declarationEmitExpressionInExtends4.ts(1,10): error TS4060: Return type of exported function has or is using private name 'D'. -tests/cases/compiler/declarationEmitExpressionInExtends4.ts(5,7): error TS4093: 'extends' clause of exported class 'C' refers to a type whose name cannot be referenced. tests/cases/compiler/declarationEmitExpressionInExtends4.ts(5,17): error TS2315: Type 'D' is not generic. -tests/cases/compiler/declarationEmitExpressionInExtends4.ts(9,7): error TS4093: 'extends' clause of exported class 'C2' refers to a type whose name cannot be referenced. +tests/cases/compiler/declarationEmitExpressionInExtends4.ts(5,17): error TS4020: 'extends' clause of exported class 'C' has or is using private name 'D'. tests/cases/compiler/declarationEmitExpressionInExtends4.ts(9,18): error TS2304: Cannot find name 'SomeUndefinedFunction'. tests/cases/compiler/declarationEmitExpressionInExtends4.ts(14,18): error TS2304: Cannot find name 'SomeUndefinedFunction'. tests/cases/compiler/declarationEmitExpressionInExtends4.ts(14,18): error TS4020: 'extends' clause of exported class 'C3' has or is using private name 'SomeUndefinedFunction'. -==== tests/cases/compiler/declarationEmitExpressionInExtends4.ts (7 errors) ==== +==== tests/cases/compiler/declarationEmitExpressionInExtends4.ts (6 errors) ==== function getSomething() { ~~~~~~~~~~~~ !!! error TS4060: Return type of exported function has or is using private name 'D'. @@ -15,16 +14,14 @@ tests/cases/compiler/declarationEmitExpressionInExtends4.ts(14,18): error TS4020 } class C extends getSomething() { - ~ -!!! error TS4093: 'extends' clause of exported class 'C' refers to a type whose name cannot be referenced. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2315: Type 'D' is not generic. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS4020: 'extends' clause of exported class 'C' has or is using private name 'D'. } class C2 extends SomeUndefinedFunction() { - ~~ -!!! error TS4093: 'extends' clause of exported class 'C2' refers to a type whose name cannot be referenced. ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'SomeUndefinedFunction'. diff --git a/tests/baselines/reference/exportClassExtendingIntersection.errors.txt b/tests/baselines/reference/exportClassExtendingIntersection.errors.txt deleted file mode 100644 index eb94869fdc2..00000000000 --- a/tests/baselines/reference/exportClassExtendingIntersection.errors.txt +++ /dev/null @@ -1,39 +0,0 @@ -tests/cases/compiler/FinalClass.ts(4,14): error TS4093: 'extends' clause of exported class 'MyExtendedClass' refers to a type whose name cannot be referenced. - - -==== tests/cases/compiler/BaseClass.ts (0 errors) ==== - export type Constructor = new (...args: any[]) => T; - - export class MyBaseClass { - baseProperty: string; - constructor(value: T) {} - } -==== tests/cases/compiler/MixinClass.ts (0 errors) ==== - import { Constructor, MyBaseClass } from './BaseClass'; - - export interface MyMixin { - mixinProperty: string; - } - - export function MyMixin>>(base: T): T & Constructor { - return class extends base { - mixinProperty: string; - } - } -==== tests/cases/compiler/FinalClass.ts (1 errors) ==== - import { MyBaseClass } from './BaseClass'; - import { MyMixin } from './MixinClass'; - - export class MyExtendedClass extends MyMixin(MyBaseClass) { - ~~~~~~~~~~~~~~~ -!!! error TS4093: 'extends' clause of exported class 'MyExtendedClass' refers to a type whose name cannot be referenced. - extendedClassProperty: number; - } -==== tests/cases/compiler/Main.ts (0 errors) ==== - import { MyExtendedClass } from './FinalClass'; - import { MyMixin } from './MixinClass'; - - const myExtendedClass = new MyExtendedClass('string'); - - const AnotherMixedClass = MyMixin(MyExtendedClass); - \ No newline at end of file diff --git a/tests/baselines/reference/exportClassExtendingIntersection.js b/tests/baselines/reference/exportClassExtendingIntersection.js index 2309a9af9b6..cfb3fd66842 100644 --- a/tests/baselines/reference/exportClassExtendingIntersection.js +++ b/tests/baselines/reference/exportClassExtendingIntersection.js @@ -111,4 +111,11 @@ export interface MyMixin { mixinProperty: string; } export declare function MyMixin>>(base: T): T & Constructor; +//// [FinalClass.d.ts] +import { MyBaseClass } from './BaseClass'; +import { MyMixin } from './MixinClass'; +declare var _MyExtendedClass_intersection_base: typeof MyBaseClass & (new (...args: any[]) => MyMixin); +export declare class MyExtendedClass extends _MyExtendedClass_intersection_base { + extendedClassProperty: number; +} //// [Main.d.ts] diff --git a/tests/baselines/reference/exportClassExtendingIntersection.symbols b/tests/baselines/reference/exportClassExtendingIntersection.symbols new file mode 100644 index 00000000000..b22febb7d72 --- /dev/null +++ b/tests/baselines/reference/exportClassExtendingIntersection.symbols @@ -0,0 +1,79 @@ +=== tests/cases/compiler/BaseClass.ts === +export type Constructor = new (...args: any[]) => T; +>Constructor : Symbol(Constructor, Decl(BaseClass.ts, 0, 0)) +>T : Symbol(T, Decl(BaseClass.ts, 0, 24)) +>args : Symbol(args, Decl(BaseClass.ts, 0, 34)) +>T : Symbol(T, Decl(BaseClass.ts, 0, 24)) + +export class MyBaseClass { +>MyBaseClass : Symbol(MyBaseClass, Decl(BaseClass.ts, 0, 55)) +>T : Symbol(T, Decl(BaseClass.ts, 2, 25)) + + baseProperty: string; +>baseProperty : Symbol(MyBaseClass.baseProperty, Decl(BaseClass.ts, 2, 29)) + + constructor(value: T) {} +>value : Symbol(value, Decl(BaseClass.ts, 4, 16)) +>T : Symbol(T, Decl(BaseClass.ts, 2, 25)) +} +=== tests/cases/compiler/MixinClass.ts === +import { Constructor, MyBaseClass } from './BaseClass'; +>Constructor : Symbol(Constructor, Decl(MixinClass.ts, 0, 8)) +>MyBaseClass : Symbol(MyBaseClass, Decl(MixinClass.ts, 0, 21)) + +export interface MyMixin { +>MyMixin : Symbol(MyMixin, Decl(MixinClass.ts, 0, 55), Decl(MixinClass.ts, 4, 1)) + + mixinProperty: string; +>mixinProperty : Symbol(MyMixin.mixinProperty, Decl(MixinClass.ts, 2, 26)) +} + +export function MyMixin>>(base: T): T & Constructor { +>MyMixin : Symbol(MyMixin, Decl(MixinClass.ts, 0, 55), Decl(MixinClass.ts, 4, 1)) +>T : Symbol(T, Decl(MixinClass.ts, 6, 24)) +>Constructor : Symbol(Constructor, Decl(MixinClass.ts, 0, 8)) +>MyBaseClass : Symbol(MyBaseClass, Decl(MixinClass.ts, 0, 21)) +>base : Symbol(base, Decl(MixinClass.ts, 6, 65)) +>T : Symbol(T, Decl(MixinClass.ts, 6, 24)) +>T : Symbol(T, Decl(MixinClass.ts, 6, 24)) +>Constructor : Symbol(Constructor, Decl(MixinClass.ts, 0, 8)) +>MyMixin : Symbol(MyMixin, Decl(MixinClass.ts, 0, 55), Decl(MixinClass.ts, 4, 1)) + + return class extends base { +>base : Symbol(base, Decl(MixinClass.ts, 6, 65)) + + mixinProperty: string; +>mixinProperty : Symbol((Anonymous class).mixinProperty, Decl(MixinClass.ts, 7, 31)) + } +} +=== tests/cases/compiler/FinalClass.ts === +import { MyBaseClass } from './BaseClass'; +>MyBaseClass : Symbol(MyBaseClass, Decl(FinalClass.ts, 0, 8)) + +import { MyMixin } from './MixinClass'; +>MyMixin : Symbol(MyMixin, Decl(FinalClass.ts, 1, 8)) + +export class MyExtendedClass extends MyMixin(MyBaseClass) { +>MyExtendedClass : Symbol(MyExtendedClass, Decl(FinalClass.ts, 1, 39)) +>MyMixin : Symbol(MyMixin, Decl(FinalClass.ts, 1, 8)) +>MyBaseClass : Symbol(MyBaseClass, Decl(FinalClass.ts, 0, 8)) + + extendedClassProperty: number; +>extendedClassProperty : Symbol(MyExtendedClass.extendedClassProperty, Decl(FinalClass.ts, 3, 67)) +} +=== tests/cases/compiler/Main.ts === +import { MyExtendedClass } from './FinalClass'; +>MyExtendedClass : Symbol(MyExtendedClass, Decl(Main.ts, 0, 8)) + +import { MyMixin } from './MixinClass'; +>MyMixin : Symbol(MyMixin, Decl(Main.ts, 1, 8)) + +const myExtendedClass = new MyExtendedClass('string'); +>myExtendedClass : Symbol(myExtendedClass, Decl(Main.ts, 3, 5)) +>MyExtendedClass : Symbol(MyExtendedClass, Decl(Main.ts, 0, 8)) + +const AnotherMixedClass = MyMixin(MyExtendedClass); +>AnotherMixedClass : Symbol(AnotherMixedClass, Decl(Main.ts, 5, 5)) +>MyMixin : Symbol(MyMixin, Decl(Main.ts, 1, 8)) +>MyExtendedClass : Symbol(MyExtendedClass, Decl(Main.ts, 0, 8)) + diff --git a/tests/baselines/reference/exportClassExtendingIntersection.types b/tests/baselines/reference/exportClassExtendingIntersection.types new file mode 100644 index 00000000000..5840c53a056 --- /dev/null +++ b/tests/baselines/reference/exportClassExtendingIntersection.types @@ -0,0 +1,84 @@ +=== tests/cases/compiler/BaseClass.ts === +export type Constructor = new (...args: any[]) => T; +>Constructor : Constructor +>T : T +>args : any[] +>T : T + +export class MyBaseClass { +>MyBaseClass : MyBaseClass +>T : T + + baseProperty: string; +>baseProperty : string + + constructor(value: T) {} +>value : T +>T : T +} +=== tests/cases/compiler/MixinClass.ts === +import { Constructor, MyBaseClass } from './BaseClass'; +>Constructor : any +>MyBaseClass : typeof MyBaseClass + +export interface MyMixin { +>MyMixin : MyMixin + + mixinProperty: string; +>mixinProperty : string +} + +export function MyMixin>>(base: T): T & Constructor { +>MyMixin : >>(base: T) => T & Constructor +>T : T +>Constructor : Constructor +>MyBaseClass : MyBaseClass +>base : T +>T : T +>T : T +>Constructor : Constructor +>MyMixin : MyMixin + + return class extends base { +>class extends base { mixinProperty: string; } : { new (...args: any[]): (Anonymous class); prototype: MyMixin.(Anonymous class); } & T +>base : MyBaseClass + + mixinProperty: string; +>mixinProperty : string + } +} +=== tests/cases/compiler/FinalClass.ts === +import { MyBaseClass } from './BaseClass'; +>MyBaseClass : typeof MyBaseClass + +import { MyMixin } from './MixinClass'; +>MyMixin : MyBaseClass>(base: T) => T & (new (...args: any[]) => MyMixin) + +export class MyExtendedClass extends MyMixin(MyBaseClass) { +>MyExtendedClass : MyExtendedClass +>MyMixin(MyBaseClass) : MyBaseClass & MyMixin +>MyMixin : MyBaseClass>(base: T) => T & (new (...args: any[]) => MyMixin) +>MyBaseClass : typeof MyBaseClass + + extendedClassProperty: number; +>extendedClassProperty : number +} +=== tests/cases/compiler/Main.ts === +import { MyExtendedClass } from './FinalClass'; +>MyExtendedClass : typeof MyExtendedClass + +import { MyMixin } from './MixinClass'; +>MyMixin : MyBaseClass>(base: T) => T & (new (...args: any[]) => MyMixin) + +const myExtendedClass = new MyExtendedClass('string'); +>myExtendedClass : MyExtendedClass +>new MyExtendedClass('string') : MyExtendedClass +>MyExtendedClass : typeof MyExtendedClass +>'string' : "string" + +const AnotherMixedClass = MyMixin(MyExtendedClass); +>AnotherMixedClass : typeof MyExtendedClass & (new (...args: any[]) => MyMixin) +>MyMixin(MyExtendedClass) : typeof MyExtendedClass & (new (...args: any[]) => MyMixin) +>MyMixin : MyBaseClass>(base: T) => T & (new (...args: any[]) => MyMixin) +>MyExtendedClass : typeof MyExtendedClass + diff --git a/tests/baselines/reference/mixinAccessModifiers.errors.txt b/tests/baselines/reference/mixinAccessModifiers.errors.txt index a93725e01d2..fa2fc4ac99a 100644 --- a/tests/baselines/reference/mixinAccessModifiers.errors.txt +++ b/tests/baselines/reference/mixinAccessModifiers.errors.txt @@ -5,25 +5,19 @@ tests/cases/conformance/classes/mixinAccessModifiers.ts(50,4): error TS2445: Pro tests/cases/conformance/classes/mixinAccessModifiers.ts(65,7): error TS2415: Class 'C1' incorrectly extends base class 'Private & Private2'. Type 'C1' is not assignable to type 'Private'. Property 'p' has conflicting declarations and is inaccessible in type 'C1'. -tests/cases/conformance/classes/mixinAccessModifiers.ts(65,7): error TS4093: 'extends' clause of exported class 'C1' refers to a type whose name cannot be referenced. tests/cases/conformance/classes/mixinAccessModifiers.ts(66,7): error TS2415: Class 'C2' incorrectly extends base class 'Private & Protected'. Type 'C2' is not assignable to type 'Private'. Property 'p' has conflicting declarations and is inaccessible in type 'C2'. -tests/cases/conformance/classes/mixinAccessModifiers.ts(66,7): error TS4093: 'extends' clause of exported class 'C2' refers to a type whose name cannot be referenced. tests/cases/conformance/classes/mixinAccessModifiers.ts(67,7): error TS2415: Class 'C3' incorrectly extends base class 'Private & Public'. Type 'C3' is not assignable to type 'Private'. Property 'p' has conflicting declarations and is inaccessible in type 'C3'. -tests/cases/conformance/classes/mixinAccessModifiers.ts(67,7): error TS4093: 'extends' clause of exported class 'C3' refers to a type whose name cannot be referenced. -tests/cases/conformance/classes/mixinAccessModifiers.ts(69,7): error TS4093: 'extends' clause of exported class 'C4' refers to a type whose name cannot be referenced. -tests/cases/conformance/classes/mixinAccessModifiers.ts(82,7): error TS4093: 'extends' clause of exported class 'C5' refers to a type whose name cannot be referenced. tests/cases/conformance/classes/mixinAccessModifiers.ts(84,6): error TS2445: Property 'p' is protected and only accessible within class 'C4' and its subclasses. tests/cases/conformance/classes/mixinAccessModifiers.ts(89,6): error TS2445: Property 's' is protected and only accessible within class 'typeof C4' and its subclasses. -tests/cases/conformance/classes/mixinAccessModifiers.ts(95,7): error TS4093: 'extends' clause of exported class 'C6' refers to a type whose name cannot be referenced. tests/cases/conformance/classes/mixinAccessModifiers.ts(97,6): error TS2445: Property 'p' is protected and only accessible within class 'C4' and its subclasses. tests/cases/conformance/classes/mixinAccessModifiers.ts(102,6): error TS2445: Property 's' is protected and only accessible within class 'typeof C4' and its subclasses. -==== tests/cases/conformance/classes/mixinAccessModifiers.ts (17 errors) ==== +==== tests/cases/conformance/classes/mixinAccessModifiers.ts (11 errors) ==== type Constructable = new (...args: any[]) => object; class Private { @@ -101,26 +95,18 @@ tests/cases/conformance/classes/mixinAccessModifiers.ts(102,6): error TS2445: Pr !!! error TS2415: Class 'C1' incorrectly extends base class 'Private & Private2'. !!! error TS2415: Type 'C1' is not assignable to type 'Private'. !!! error TS2415: Property 'p' has conflicting declarations and is inaccessible in type 'C1'. - ~~ -!!! error TS4093: 'extends' clause of exported class 'C1' refers to a type whose name cannot be referenced. class C2 extends Mix(Private, Protected) {} ~~ !!! error TS2415: Class 'C2' incorrectly extends base class 'Private & Protected'. !!! error TS2415: Type 'C2' is not assignable to type 'Private'. !!! error TS2415: Property 'p' has conflicting declarations and is inaccessible in type 'C2'. - ~~ -!!! error TS4093: 'extends' clause of exported class 'C2' refers to a type whose name cannot be referenced. class C3 extends Mix(Private, Public) {} ~~ !!! error TS2415: Class 'C3' incorrectly extends base class 'Private & Public'. !!! error TS2415: Type 'C3' is not assignable to type 'Private'. !!! error TS2415: Property 'p' has conflicting declarations and is inaccessible in type 'C3'. - ~~ -!!! error TS4093: 'extends' clause of exported class 'C3' refers to a type whose name cannot be referenced. class C4 extends Mix(Protected, Protected2) { - ~~ -!!! error TS4093: 'extends' clause of exported class 'C4' refers to a type whose name cannot be referenced. f(c4: C4, c5: C5, c6: C6) { c4.p; c5.p; @@ -134,8 +120,6 @@ tests/cases/conformance/classes/mixinAccessModifiers.ts(102,6): error TS2445: Pr } class C5 extends Mix(Protected, Public) { - ~~ -!!! error TS4093: 'extends' clause of exported class 'C5' refers to a type whose name cannot be referenced. f(c4: C4, c5: C5, c6: C6) { c4.p; // Error, not in class deriving from Protected2 ~ @@ -153,8 +137,6 @@ tests/cases/conformance/classes/mixinAccessModifiers.ts(102,6): error TS2445: Pr } class C6 extends Mix(Public, Public2) { - ~~ -!!! error TS4093: 'extends' clause of exported class 'C6' refers to a type whose name cannot be referenced. f(c4: C4, c5: C5, c6: C6) { c4.p; // Error, not in class deriving from Protected2 ~ diff --git a/tests/baselines/reference/mixinAccessModifiers.js b/tests/baselines/reference/mixinAccessModifiers.js index 8100c9db9e9..9abb2d00722 100644 --- a/tests/baselines/reference/mixinAccessModifiers.js +++ b/tests/baselines/reference/mixinAccessModifiers.js @@ -263,3 +263,66 @@ var C6 = (function (_super) { }; return C6; }(Mix(Public, Public2))); + + +//// [mixinAccessModifiers.d.ts] +declare type Constructable = new (...args: any[]) => object; +declare class Private { + constructor(...args: any[]); + private p; +} +declare class Private2 { + constructor(...args: any[]); + private p; +} +declare class Protected { + constructor(...args: any[]); + protected p: string; + protected static s: string; +} +declare class Protected2 { + constructor(...args: any[]); + protected p: string; + protected static s: string; +} +declare class Public { + constructor(...args: any[]); + p: string; + static s: string; +} +declare class Public2 { + constructor(...args: any[]); + p: string; + static s: string; +} +declare function f1(x: Private & Private2): void; +declare function f2(x: Private & Protected): void; +declare function f3(x: Private & Public): void; +declare function f4(x: Protected & Protected2): void; +declare function f5(x: Protected & Public): void; +declare function f6(x: Public & Public2): void; +declare function Mix(c1: T, c2: U): T & U; +declare var _C1_intersection_base: typeof Private & typeof Private2; +declare class C1 extends _C1_intersection_base { +} +declare var _C2_intersection_base: typeof Private & typeof Protected; +declare class C2 extends _C2_intersection_base { +} +declare var _C3_intersection_base: typeof Private & typeof Public; +declare class C3 extends _C3_intersection_base { +} +declare var _C4_intersection_base: typeof Protected & typeof Protected2; +declare class C4 extends _C4_intersection_base { + f(c4: C4, c5: C5, c6: C6): void; + static g(): void; +} +declare var _C5_intersection_base: typeof Protected & typeof Public; +declare class C5 extends _C5_intersection_base { + f(c4: C4, c5: C5, c6: C6): void; + static g(): void; +} +declare var _C6_intersection_base: typeof Public & typeof Public2; +declare class C6 extends _C6_intersection_base { + f(c4: C4, c5: C5, c6: C6): void; + static g(): void; +} From 729c1e19abb09fe4475313eb488c4c7e9dffc850 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 2 May 2017 15:00:56 -0700 Subject: [PATCH 21/92] __asyncDelegator cleanup --- src/compiler/transformers/esnext.ts | 6 +++--- .../emitter.asyncGenerators.classMethods.es2015.js | 12 ++++++------ .../emitter.asyncGenerators.classMethods.es5.js | 12 ++++++------ ...er.asyncGenerators.functionDeclarations.es2015.js | 12 ++++++------ ...itter.asyncGenerators.functionDeclarations.es5.js | 12 ++++++------ ...ter.asyncGenerators.functionExpressions.es2015.js | 12 ++++++------ ...mitter.asyncGenerators.functionExpressions.es5.js | 12 ++++++------ ...er.asyncGenerators.objectLiteralMethods.es2015.js | 12 ++++++------ ...itter.asyncGenerators.objectLiteralMethods.es5.js | 12 ++++++------ 9 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/compiler/transformers/esnext.ts b/src/compiler/transformers/esnext.ts index 133272afc3a..8d88d9b286b 100644 --- a/src/compiler/transformers/esnext.ts +++ b/src/compiler/transformers/esnext.ts @@ -928,9 +928,9 @@ namespace ts { scoped: false, text: ` var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; ` }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js index 2a0ca50a97b..5f1b97b208c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js @@ -127,9 +127,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -168,9 +168,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; class C5 { f() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js index a72f1dd27c5..4d78db84c03 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js @@ -263,9 +263,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -355,9 +355,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js index b25f69297d3..98e8291ac6a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js @@ -90,9 +90,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -129,9 +129,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; function f5() { return __asyncGenerator(this, arguments, function* f5_1() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js index 87d5f1a2b01..c5b09b216d5 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js @@ -217,9 +217,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -304,9 +304,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js index 78909a55ab0..d491c0465f0 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js @@ -90,9 +90,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -129,9 +129,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; const f5 = function () { return __asyncGenerator(this, arguments, function* () { diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js index 9f4811d8af9..7a40ba1808f 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js @@ -217,9 +217,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -304,9 +304,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js index 902197651be..22ffff01eec 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js @@ -110,9 +110,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -151,9 +151,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; const o5 = { f() { diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js index 34d970afdbe..a76028b028e 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js @@ -237,9 +237,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); @@ -326,9 +326,9 @@ var __asyncValues = (this && this.__asyncIterator) || function (o) { return m ? m.call(o) : typeof __values === "function" ? __values(o) : o[Symbol.iterator](); }; var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { - var i = { next: verb("next"), "throw": verb("throw"), "return": verb("return") }, p; - return i[Symbol.iterator] = function () { return this; }, i; - function verb(n) { return o[n] && function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } + var i, p; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : v; }; } }; var __values = (this && this.__values) || function (o) { var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; From 4c0735218eff9ed294162534de86080b1d427f46 Mon Sep 17 00:00:00 2001 From: Arthur Ozga Date: Tue, 2 May 2017 15:36:14 -0700 Subject: [PATCH 22/92] move import getCodeActions into named method --- src/services/codefixes/importFixes.ts | 777 +++++++++++++------------- 1 file changed, 389 insertions(+), 388 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 78c27a1276b..9322f09cb86 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -1,5 +1,13 @@ /* @internal */ namespace ts.codefix { + registerCodeFix({ + errorCodes: [ + Diagnostics.Cannot_find_name_0.code, + Diagnostics.Cannot_find_namespace_0.code, + Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code + ], + getCodeActions: getImportCodeActions + }); type ImportCodeActionKind = "CodeChange" | "InsertingIntoExistingImport" | "NewImport"; interface ImportCodeAction extends CodeAction { @@ -113,465 +121,458 @@ namespace ts.codefix { } } - registerCodeFix({ - errorCodes: [ - Diagnostics.Cannot_find_name_0.code, - Diagnostics.Cannot_find_namespace_0.code, - Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code - ], - getCodeActions: (context: CodeFixContext) => { - const sourceFile = context.sourceFile; - const checker = context.program.getTypeChecker(); - const allSourceFiles = context.program.getSourceFiles(); - const useCaseSensitiveFileNames = context.host.useCaseSensitiveFileNames ? context.host.useCaseSensitiveFileNames() : false; + function getImportCodeActions(context: CodeFixContext): ImportCodeAction[] { + const sourceFile = context.sourceFile; + const checker = context.program.getTypeChecker(); + const allSourceFiles = context.program.getSourceFiles(); + const useCaseSensitiveFileNames = context.host.useCaseSensitiveFileNames ? context.host.useCaseSensitiveFileNames() : false; - const token = getTokenAtPosition(sourceFile, context.span.start); - const name = token.getText(); - const symbolIdActionMap = new ImportCodeActionMap(); + const token = getTokenAtPosition(sourceFile, context.span.start); + const name = token.getText(); + const symbolIdActionMap = new ImportCodeActionMap(); - // this is a module id -> module import declaration map - const cachedImportDeclarations: (ImportDeclaration | ImportEqualsDeclaration)[][] = []; - let lastImportDeclaration: Node; + // this is a module id -> module import declaration map + const cachedImportDeclarations: (ImportDeclaration | ImportEqualsDeclaration)[][] = []; + let lastImportDeclaration: Node; - const currentTokenMeaning = getMeaningFromLocation(token); - if (context.errorCode === Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code) { - const symbol = checker.getAliasedSymbol(checker.getSymbolAtLocation(token)); - return getCodeActionForImport(symbol, /*isDefault*/ false, /*isNamespaceImport*/ true); + const currentTokenMeaning = getMeaningFromLocation(token); + if (context.errorCode === Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code) { + const symbol = checker.getAliasedSymbol(checker.getSymbolAtLocation(token)); + return getCodeActionForImport(symbol, /*isDefault*/ false, /*isNamespaceImport*/ true); + } + + const candidateModules = checker.getAmbientModules(); + for (const otherSourceFile of allSourceFiles) { + if (otherSourceFile !== sourceFile && isExternalOrCommonJsModule(otherSourceFile)) { + candidateModules.push(otherSourceFile.symbol); } + } - const candidateModules = checker.getAmbientModules(); - for (const otherSourceFile of allSourceFiles) { - if (otherSourceFile !== sourceFile && isExternalOrCommonJsModule(otherSourceFile)) { - candidateModules.push(otherSourceFile.symbol); + for (const moduleSymbol of candidateModules) { + context.cancellationToken.throwIfCancellationRequested(); + + // check the default export + const defaultExport = checker.tryGetMemberInModuleExports("default", moduleSymbol); + if (defaultExport) { + const localSymbol = getLocalSymbolForExportDefault(defaultExport); + if (localSymbol && localSymbol.name === name && checkSymbolHasMeaning(localSymbol, currentTokenMeaning)) { + // check if this symbol is already used + const symbolId = getUniqueSymbolId(localSymbol); + symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol, /*isDefault*/ true)); } } - for (const moduleSymbol of candidateModules) { - context.cancellationToken.throwIfCancellationRequested(); + // check exports with the same name + const exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExports(name, moduleSymbol); + if (exportSymbolWithIdenticalName && checkSymbolHasMeaning(exportSymbolWithIdenticalName, currentTokenMeaning)) { + const symbolId = getUniqueSymbolId(exportSymbolWithIdenticalName); + symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol)); + } + } - // check the default export - const defaultExport = checker.tryGetMemberInModuleExports("default", moduleSymbol); - if (defaultExport) { - const localSymbol = getLocalSymbolForExportDefault(defaultExport); - if (localSymbol && localSymbol.name === name && checkSymbolHasMeaning(localSymbol, currentTokenMeaning)) { - // check if this symbol is already used - const symbolId = getUniqueSymbolId(localSymbol); - symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol, /*isDefault*/ true)); + return symbolIdActionMap.getAllActions(); + + function getImportDeclarations(moduleSymbol: Symbol) { + const moduleSymbolId = getUniqueSymbolId(moduleSymbol); + + const cached = cachedImportDeclarations[moduleSymbolId]; + if (cached) { + return cached; + } + + const existingDeclarations: (ImportDeclaration | ImportEqualsDeclaration)[] = []; + for (const importModuleSpecifier of sourceFile.imports) { + const importSymbol = checker.getSymbolAtLocation(importModuleSpecifier); + if (importSymbol === moduleSymbol) { + existingDeclarations.push(getImportDeclaration(importModuleSpecifier)); + } + } + cachedImportDeclarations[moduleSymbolId] = existingDeclarations; + return existingDeclarations; + + function getImportDeclaration(moduleSpecifier: LiteralExpression) { + let node: Node = moduleSpecifier; + while (node) { + if (node.kind === SyntaxKind.ImportDeclaration) { + return node; } + if (node.kind === SyntaxKind.ImportEqualsDeclaration) { + return node; + } + node = node.parent; } + return undefined; + } + } - // check exports with the same name - const exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExports(name, moduleSymbol); - if (exportSymbolWithIdenticalName && checkSymbolHasMeaning(exportSymbolWithIdenticalName, currentTokenMeaning)) { - const symbolId = getUniqueSymbolId(exportSymbolWithIdenticalName); - symbolIdActionMap.addActions(symbolId, getCodeActionForImport(moduleSymbol)); - } + function getUniqueSymbolId(symbol: Symbol) { + if (symbol.flags & SymbolFlags.Alias) { + return getSymbolId(checker.getAliasedSymbol(symbol)); + } + return getSymbolId(symbol); + } + + function checkSymbolHasMeaning(symbol: Symbol, meaning: SemanticMeaning) { + const declarations = symbol.getDeclarations(); + return declarations ? some(symbol.declarations, decl => !!(getMeaningFromDeclaration(decl) & meaning)) : false; + } + + function getCodeActionForImport(moduleSymbol: Symbol, isDefault?: boolean, isNamespaceImport?: boolean): ImportCodeAction[] { + const existingDeclarations = getImportDeclarations(moduleSymbol); + if (existingDeclarations.length > 0) { + // With an existing import statement, there are more than one actions the user can do. + return getCodeActionsForExistingImport(existingDeclarations); + } + else { + return [getCodeActionForNewImport()]; } - return symbolIdActionMap.getAllActions(); + function getCodeActionsForExistingImport(declarations: (ImportDeclaration | ImportEqualsDeclaration)[]): ImportCodeAction[] { + const actions: ImportCodeAction[] = []; - function getImportDeclarations(moduleSymbol: Symbol) { - const moduleSymbolId = getUniqueSymbolId(moduleSymbol); - - const cached = cachedImportDeclarations[moduleSymbolId]; - if (cached) { - return cached; - } - - const existingDeclarations: (ImportDeclaration | ImportEqualsDeclaration)[] = []; - for (const importModuleSpecifier of sourceFile.imports) { - const importSymbol = checker.getSymbolAtLocation(importModuleSpecifier); - if (importSymbol === moduleSymbol) { - existingDeclarations.push(getImportDeclaration(importModuleSpecifier)); - } - } - cachedImportDeclarations[moduleSymbolId] = existingDeclarations; - return existingDeclarations; - - function getImportDeclaration(moduleSpecifier: LiteralExpression) { - let node: Node = moduleSpecifier; - while (node) { - if (node.kind === SyntaxKind.ImportDeclaration) { - return node; + // It is possible that multiple import statements with the same specifier exist in the file. + // e.g. + // + // import * as ns from "foo"; + // import { member1, member2 } from "foo"; + // + // member3/**/ <-- cusor here + // + // in this case we should provie 2 actions: + // 1. change "member3" to "ns.member3" + // 2. add "member3" to the second import statement's import list + // and it is up to the user to decide which one fits best. + let namespaceImportDeclaration: ImportDeclaration | ImportEqualsDeclaration; + let namedImportDeclaration: ImportDeclaration; + let existingModuleSpecifier: string; + for (const declaration of declarations) { + if (declaration.kind === SyntaxKind.ImportDeclaration) { + const namedBindings = declaration.importClause && declaration.importClause.namedBindings; + if (namedBindings && namedBindings.kind === SyntaxKind.NamespaceImport) { + // case: + // import * as ns from "foo" + namespaceImportDeclaration = declaration; } - if (node.kind === SyntaxKind.ImportEqualsDeclaration) { - return node; + else { + // cases: + // import default from "foo" + // import { bar } from "foo" or combination with the first one + // import "foo" + namedImportDeclaration = declaration; } - node = node.parent; + existingModuleSpecifier = declaration.moduleSpecifier.getText(); + } + else { + // case: + // import foo = require("foo") + namespaceImportDeclaration = declaration; + existingModuleSpecifier = getModuleSpecifierFromImportEqualsDeclaration(declaration); } - return undefined; } - } - function getUniqueSymbolId(symbol: Symbol) { - if (symbol.flags & SymbolFlags.Alias) { - return getSymbolId(checker.getAliasedSymbol(symbol)); + if (namespaceImportDeclaration) { + actions.push(getCodeActionForNamespaceImport(namespaceImportDeclaration)); } - return getSymbolId(symbol); - } - function checkSymbolHasMeaning(symbol: Symbol, meaning: SemanticMeaning) { - const declarations = symbol.getDeclarations(); - return declarations ? some(symbol.declarations, decl => !!(getMeaningFromDeclaration(decl) & meaning)) : false; - } - - function getCodeActionForImport(moduleSymbol: Symbol, isDefault?: boolean, isNamespaceImport?: boolean): ImportCodeAction[] { - const existingDeclarations = getImportDeclarations(moduleSymbol); - if (existingDeclarations.length > 0) { - // With an existing import statement, there are more than one actions the user can do. - return getCodeActionsForExistingImport(existingDeclarations); + if (!isNamespaceImport && namedImportDeclaration && namedImportDeclaration.importClause && + (namedImportDeclaration.importClause.name || namedImportDeclaration.importClause.namedBindings)) { + /** + * If the existing import declaration already has a named import list, just + * insert the identifier into that list. + */ + const fileTextChanges = getTextChangeForImportClause(namedImportDeclaration.importClause); + const moduleSpecifierWithoutQuotes = stripQuotes(namedImportDeclaration.moduleSpecifier.getText()); + actions.push(createCodeAction( + Diagnostics.Add_0_to_existing_import_declaration_from_1, + [name, moduleSpecifierWithoutQuotes], + fileTextChanges, + "InsertingIntoExistingImport", + moduleSpecifierWithoutQuotes + )); } else { - return [getCodeActionForNewImport()]; + // we need to create a new import statement, but the existing module specifier can be reused. + actions.push(getCodeActionForNewImport(existingModuleSpecifier)); + } + return actions; + + function getModuleSpecifierFromImportEqualsDeclaration(declaration: ImportEqualsDeclaration) { + if (declaration.moduleReference && declaration.moduleReference.kind === SyntaxKind.ExternalModuleReference) { + return declaration.moduleReference.expression.getText(); + } + return declaration.moduleReference.getText(); } - function getCodeActionsForExistingImport(declarations: (ImportDeclaration | ImportEqualsDeclaration)[]): ImportCodeAction[] { - const actions: ImportCodeAction[] = []; - - // It is possible that multiple import statements with the same specifier exist in the file. - // e.g. - // - // import * as ns from "foo"; - // import { member1, member2 } from "foo"; - // - // member3/**/ <-- cusor here - // - // in this case we should provie 2 actions: - // 1. change "member3" to "ns.member3" - // 2. add "member3" to the second import statement's import list - // and it is up to the user to decide which one fits best. - let namespaceImportDeclaration: ImportDeclaration | ImportEqualsDeclaration; - let namedImportDeclaration: ImportDeclaration; - let existingModuleSpecifier: string; - for (const declaration of declarations) { - if (declaration.kind === SyntaxKind.ImportDeclaration) { - const namedBindings = declaration.importClause && declaration.importClause.namedBindings; - if (namedBindings && namedBindings.kind === SyntaxKind.NamespaceImport) { - // case: - // import * as ns from "foo" - namespaceImportDeclaration = declaration; - } - else { - // cases: - // import default from "foo" - // import { bar } from "foo" or combination with the first one - // import "foo" - namedImportDeclaration = declaration; - } - existingModuleSpecifier = declaration.moduleSpecifier.getText(); - } - else { - // case: - // import foo = require("foo") - namespaceImportDeclaration = declaration; - existingModuleSpecifier = getModuleSpecifierFromImportEqualsDeclaration(declaration); - } + function getTextChangeForImportClause(importClause: ImportClause): FileTextChanges[] { + const importList = importClause.namedBindings; + const newImportSpecifier = createImportSpecifier(/*propertyName*/ undefined, createIdentifier(name)); + // case 1: + // original text: import default from "module" + // change to: import default, { name } from "module" + // case 2: + // original text: import {} from "module" + // change to: import { name } from "module" + if (!importList || importList.elements.length === 0) { + const newImportClause = createImportClause(importClause.name, createNamedImports([newImportSpecifier])); + return createChangeTracker().replaceNode(sourceFile, importClause, newImportClause).getChanges(); } - if (namespaceImportDeclaration) { - actions.push(getCodeActionForNamespaceImport(namespaceImportDeclaration)); - } - - if (!isNamespaceImport && namedImportDeclaration && namedImportDeclaration.importClause && - (namedImportDeclaration.importClause.name || namedImportDeclaration.importClause.namedBindings)) { - /** - * If the existing import declaration already has a named import list, just - * insert the identifier into that list. - */ - const fileTextChanges = getTextChangeForImportClause(namedImportDeclaration.importClause); - const moduleSpecifierWithoutQuotes = stripQuotes(namedImportDeclaration.moduleSpecifier.getText()); - actions.push(createCodeAction( - Diagnostics.Add_0_to_existing_import_declaration_from_1, - [name, moduleSpecifierWithoutQuotes], - fileTextChanges, - "InsertingIntoExistingImport", - moduleSpecifierWithoutQuotes - )); - } - else { - // we need to create a new import statement, but the existing module specifier can be reused. - actions.push(getCodeActionForNewImport(existingModuleSpecifier)); - } - return actions; - - function getModuleSpecifierFromImportEqualsDeclaration(declaration: ImportEqualsDeclaration) { - if (declaration.moduleReference && declaration.moduleReference.kind === SyntaxKind.ExternalModuleReference) { - return declaration.moduleReference.expression.getText(); - } - return declaration.moduleReference.getText(); - } - - function getTextChangeForImportClause(importClause: ImportClause): FileTextChanges[] { - const importList = importClause.namedBindings; - const newImportSpecifier = createImportSpecifier(/*propertyName*/ undefined, createIdentifier(name)); - // case 1: - // original text: import default from "module" - // change to: import default, { name } from "module" - // case 2: - // original text: import {} from "module" - // change to: import { name } from "module" - if (!importList || importList.elements.length === 0) { - const newImportClause = createImportClause(importClause.name, createNamedImports([newImportSpecifier])); - return createChangeTracker().replaceNode(sourceFile, importClause, newImportClause).getChanges(); - } - - /** - * If the import list has one import per line, preserve that. Otherwise, insert on same line as last element - * import { - * foo - * } from "./module"; - */ - return createChangeTracker().insertNodeInListAfter( - sourceFile, - importList.elements[importList.elements.length - 1], - newImportSpecifier).getChanges(); - } - - function getCodeActionForNamespaceImport(declaration: ImportDeclaration | ImportEqualsDeclaration): ImportCodeAction { - let namespacePrefix: string; - if (declaration.kind === SyntaxKind.ImportDeclaration) { - namespacePrefix = (declaration.importClause.namedBindings).name.getText(); - } - else { - namespacePrefix = declaration.name.getText(); - } - namespacePrefix = stripQuotes(namespacePrefix); - - /** - * Cases: - * import * as ns from "mod" - * import default, * as ns from "mod" - * import ns = require("mod") - * - * Because there is no import list, we alter the reference to include the - * namespace instead of altering the import declaration. For example, "foo" would - * become "ns.foo" - */ - return createCodeAction( - Diagnostics.Change_0_to_1, - [name, `${namespacePrefix}.${name}`], - createChangeTracker().replaceNode(sourceFile, token, createPropertyAccess(createIdentifier(namespacePrefix), name)).getChanges(), - "CodeChange" - ); - } + /** + * If the import list has one import per line, preserve that. Otherwise, insert on same line as last element + * import { + * foo + * } from "./module"; + */ + return createChangeTracker().insertNodeInListAfter( + sourceFile, + importList.elements[importList.elements.length - 1], + newImportSpecifier).getChanges(); } - function getCodeActionForNewImport(moduleSpecifier?: string): ImportCodeAction { - if (!lastImportDeclaration) { - // insert after any existing imports - for (let i = sourceFile.statements.length - 1; i >= 0; i--) { - const statement = sourceFile.statements[i]; - if (statement.kind === SyntaxKind.ImportEqualsDeclaration || statement.kind === SyntaxKind.ImportDeclaration) { - lastImportDeclaration = statement; - break; - } - } - } - - const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames); - const moduleSpecifierWithoutQuotes = stripQuotes(moduleSpecifier || getModuleSpecifierForNewImport()); - const changeTracker = createChangeTracker(); - const importClause = isDefault - ? createImportClause(createIdentifier(name), /*namedBindings*/ undefined) - : isNamespaceImport - ? createImportClause(/*name*/ undefined, createNamespaceImport(createIdentifier(name))) - : createImportClause(/*name*/ undefined, createNamedImports([createImportSpecifier(/*propertyName*/ undefined, createIdentifier(name))])); - const importDecl = createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, importClause, createLiteral(moduleSpecifierWithoutQuotes)); - if (!lastImportDeclaration) { - changeTracker.insertNodeAt(sourceFile, sourceFile.getStart(), importDecl, { suffix: `${context.newLineCharacter}${context.newLineCharacter}` }); + function getCodeActionForNamespaceImport(declaration: ImportDeclaration | ImportEqualsDeclaration): ImportCodeAction { + let namespacePrefix: string; + if (declaration.kind === SyntaxKind.ImportDeclaration) { + namespacePrefix = (declaration.importClause.namedBindings).name.getText(); } else { - changeTracker.insertNodeAfter(sourceFile, lastImportDeclaration, importDecl, { suffix: context.newLineCharacter }); + namespacePrefix = declaration.name.getText(); } + namespacePrefix = stripQuotes(namespacePrefix); - // if this file doesn't have any import statements, insert an import statement and then insert a new line - // between the only import statement and user code. Otherwise just insert the statement because chances - // are there are already a new line seperating code and import statements. + /** + * Cases: + * import * as ns from "mod" + * import default, * as ns from "mod" + * import ns = require("mod") + * + * Because there is no import list, we alter the reference to include the + * namespace instead of altering the import declaration. For example, "foo" would + * become "ns.foo" + */ return createCodeAction( - Diagnostics.Import_0_from_1, - [name, `"${moduleSpecifierWithoutQuotes}"`], - changeTracker.getChanges(), - "NewImport", - moduleSpecifierWithoutQuotes + Diagnostics.Change_0_to_1, + [name, `${namespacePrefix}.${name}`], + createChangeTracker().replaceNode(sourceFile, token, createPropertyAccess(createIdentifier(namespacePrefix), name)).getChanges(), + "CodeChange" ); + } + } - function getModuleSpecifierForNewImport() { - const fileName = sourceFile.fileName; - const moduleFileName = moduleSymbol.valueDeclaration.getSourceFile().fileName; - const sourceDirectory = getDirectoryPath(fileName); - const options = context.program.getCompilerOptions(); - - return tryGetModuleNameFromAmbientModule() || - tryGetModuleNameFromTypeRoots() || - tryGetModuleNameAsNodeModule() || - tryGetModuleNameFromBaseUrl() || - tryGetModuleNameFromRootDirs() || - removeFileExtension(getRelativePath(moduleFileName, sourceDirectory)); - - function tryGetModuleNameFromAmbientModule(): string { - if (moduleSymbol.valueDeclaration.kind !== SyntaxKind.SourceFile) { - return moduleSymbol.name; - } + function getCodeActionForNewImport(moduleSpecifier?: string): ImportCodeAction { + if (!lastImportDeclaration) { + // insert after any existing imports + for (let i = sourceFile.statements.length - 1; i >= 0; i--) { + const statement = sourceFile.statements[i]; + if (statement.kind === SyntaxKind.ImportEqualsDeclaration || statement.kind === SyntaxKind.ImportDeclaration) { + lastImportDeclaration = statement; + break; } + } + } - function tryGetModuleNameFromBaseUrl() { - if (!options.baseUrl) { - return undefined; - } + const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames); + const moduleSpecifierWithoutQuotes = stripQuotes(moduleSpecifier || getModuleSpecifierForNewImport()); + const changeTracker = createChangeTracker(); + const importClause = isDefault + ? createImportClause(createIdentifier(name), /*namedBindings*/ undefined) + : isNamespaceImport + ? createImportClause(/*name*/ undefined, createNamespaceImport(createIdentifier(name))) + : createImportClause(/*name*/ undefined, createNamedImports([createImportSpecifier(/*propertyName*/ undefined, createIdentifier(name))])); + const importDecl = createImportDeclaration(/*decorators*/ undefined, /*modifiers*/ undefined, importClause, createLiteral(moduleSpecifierWithoutQuotes)); + if (!lastImportDeclaration) { + changeTracker.insertNodeAt(sourceFile, sourceFile.getStart(), importDecl, { suffix: `${context.newLineCharacter}${context.newLineCharacter}` }); + } + else { + changeTracker.insertNodeAfter(sourceFile, lastImportDeclaration, importDecl, { suffix: context.newLineCharacter }); + } - let relativeName = getRelativePathIfInDirectory(moduleFileName, options.baseUrl); - if (!relativeName) { - return undefined; - } + // if this file doesn't have any import statements, insert an import statement and then insert a new line + // between the only import statement and user code. Otherwise just insert the statement because chances + // are there are already a new line seperating code and import statements. + return createCodeAction( + Diagnostics.Import_0_from_1, + [name, `"${moduleSpecifierWithoutQuotes}"`], + changeTracker.getChanges(), + "NewImport", + moduleSpecifierWithoutQuotes + ); - const relativeNameWithIndex = removeFileExtension(relativeName); - relativeName = removeExtensionAndIndexPostFix(relativeName); + function getModuleSpecifierForNewImport() { + const fileName = sourceFile.fileName; + const moduleFileName = moduleSymbol.valueDeclaration.getSourceFile().fileName; + const sourceDirectory = getDirectoryPath(fileName); + const options = context.program.getCompilerOptions(); - if (options.paths) { - for (const key in options.paths) { - for (const pattern of options.paths[key]) { - const indexOfStar = pattern.indexOf("*"); - if (indexOfStar === 0 && pattern.length === 1) { - continue; - } - else if (indexOfStar !== -1) { - const prefix = pattern.substr(0, indexOfStar); - const suffix = pattern.substr(indexOfStar + 1); - if (relativeName.length >= prefix.length + suffix.length && - startsWith(relativeName, prefix) && - endsWith(relativeName, suffix)) { - const matchedStar = relativeName.substr(prefix.length, relativeName.length - suffix.length); - return key.replace("\*", matchedStar); - } - } - else if (pattern === relativeName || pattern === relativeNameWithIndex) { - return key; - } - } - } - } + return tryGetModuleNameFromAmbientModule() || + tryGetModuleNameFromTypeRoots() || + tryGetModuleNameAsNodeModule() || + tryGetModuleNameFromBaseUrl() || + tryGetModuleNameFromRootDirs() || + removeFileExtension(getRelativePath(moduleFileName, sourceDirectory)); - return relativeName; + function tryGetModuleNameFromAmbientModule(): string { + if (moduleSymbol.valueDeclaration.kind !== SyntaxKind.SourceFile) { + return moduleSymbol.name; } + } - function tryGetModuleNameFromRootDirs() { - if (options.rootDirs) { - const normalizedTargetPath = getPathRelativeToRootDirs(moduleFileName, options.rootDirs); - const normalizedSourcePath = getPathRelativeToRootDirs(sourceDirectory, options.rootDirs); - if (normalizedTargetPath !== undefined) { - const relativePath = normalizedSourcePath !== undefined ? getRelativePath(normalizedTargetPath, normalizedSourcePath) : normalizedTargetPath; - return removeFileExtension(relativePath); - } - } + function tryGetModuleNameFromBaseUrl() { + if (!options.baseUrl) { return undefined; } - function tryGetModuleNameFromTypeRoots() { - const typeRoots = getEffectiveTypeRoots(options, context.host); - if (typeRoots) { - const normalizedTypeRoots = map(typeRoots, typeRoot => toPath(typeRoot, /*basePath*/ undefined, getCanonicalFileName)); - for (const typeRoot of normalizedTypeRoots) { - if (startsWith(moduleFileName, typeRoot)) { - const relativeFileName = moduleFileName.substring(typeRoot.length + 1); - return removeExtensionAndIndexPostFix(relativeFileName); - } - } - } + let relativeName = getRelativePathIfInDirectory(moduleFileName, options.baseUrl); + if (!relativeName) { + return undefined; } - function tryGetModuleNameAsNodeModule() { - if (getEmitModuleResolutionKind(options) !== ModuleResolutionKind.NodeJs) { - // nothing to do here - return undefined; - } + const relativeNameWithIndex = removeFileExtension(relativeName); + relativeName = removeExtensionAndIndexPostFix(relativeName); - const indexOfNodeModules = moduleFileName.indexOf("node_modules"); - if (indexOfNodeModules < 0) { - return undefined; - } - - let relativeFileName: string; - if (sourceDirectory.indexOf(moduleFileName.substring(0, indexOfNodeModules - 1)) === 0) { - // if node_modules folder is in this folder or any of its parent folder, no need to keep it. - relativeFileName = moduleFileName.substring(indexOfNodeModules + 13 /* "node_modules\".length */); - } - else { - relativeFileName = getRelativePath(moduleFileName, sourceDirectory); - } - - relativeFileName = removeFileExtension(relativeFileName); - if (endsWith(relativeFileName, "/index")) { - relativeFileName = getDirectoryPath(relativeFileName); - } - else { - try { - const moduleDirectory = getDirectoryPath(moduleFileName); - const packageJsonContent = JSON.parse(context.host.readFile(combinePaths(moduleDirectory, "package.json"))); - if (packageJsonContent) { - const mainFile = packageJsonContent.main || packageJsonContent.typings; - if (mainFile) { - const mainExportFile = toPath(mainFile, moduleDirectory, getCanonicalFileName); - if (removeFileExtension(mainExportFile) === removeFileExtension(moduleFileName)) { - relativeFileName = getDirectoryPath(relativeFileName); - } + if (options.paths) { + for (const key in options.paths) { + for (const pattern of options.paths[key]) { + const indexOfStar = pattern.indexOf("*"); + if (indexOfStar === 0 && pattern.length === 1) { + continue; + } + else if (indexOfStar !== -1) { + const prefix = pattern.substr(0, indexOfStar); + const suffix = pattern.substr(indexOfStar + 1); + if (relativeName.length >= prefix.length + suffix.length && + startsWith(relativeName, prefix) && + endsWith(relativeName, suffix)) { + const matchedStar = relativeName.substr(prefix.length, relativeName.length - suffix.length); + return key.replace("\*", matchedStar); } } + else if (pattern === relativeName || pattern === relativeNameWithIndex) { + return key; + } } - catch (e) { } } - - return relativeFileName; } + + return relativeName; } - function getPathRelativeToRootDirs(path: string, rootDirs: string[]) { - for (const rootDir of rootDirs) { - const relativeName = getRelativePathIfInDirectory(path, rootDir); - if (relativeName !== undefined) { - return relativeName; + function tryGetModuleNameFromRootDirs() { + if (options.rootDirs) { + const normalizedTargetPath = getPathRelativeToRootDirs(moduleFileName, options.rootDirs); + const normalizedSourcePath = getPathRelativeToRootDirs(sourceDirectory, options.rootDirs); + if (normalizedTargetPath !== undefined) { + const relativePath = normalizedSourcePath !== undefined ? getRelativePath(normalizedTargetPath, normalizedSourcePath) : normalizedTargetPath; + return removeFileExtension(relativePath); } } return undefined; } - function removeExtensionAndIndexPostFix(fileName: string) { - fileName = removeFileExtension(fileName); - if (endsWith(fileName, "/index")) { - fileName = fileName.substr(0, fileName.length - 6/* "/index".length */); + function tryGetModuleNameFromTypeRoots() { + const typeRoots = getEffectiveTypeRoots(options, context.host); + if (typeRoots) { + const normalizedTypeRoots = map(typeRoots, typeRoot => toPath(typeRoot, /*basePath*/ undefined, getCanonicalFileName)); + for (const typeRoot of normalizedTypeRoots) { + if (startsWith(moduleFileName, typeRoot)) { + const relativeFileName = moduleFileName.substring(typeRoot.length + 1); + return removeExtensionAndIndexPostFix(relativeFileName); + } + } } - return fileName; } - function getRelativePathIfInDirectory(path: string, directoryPath: string) { - const relativePath = getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); - return isRootedDiskPath(relativePath) || startsWith(relativePath, "..") ? undefined : relativePath; - } + function tryGetModuleNameAsNodeModule() { + if (getEmitModuleResolutionKind(options) !== ModuleResolutionKind.NodeJs) { + // nothing to do here + return undefined; + } - function getRelativePath(path: string, directoryPath: string) { - const relativePath = getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); - return moduleHasNonRelativeName(relativePath) ? "./" + relativePath : relativePath; + const indexOfNodeModules = moduleFileName.indexOf("node_modules"); + if (indexOfNodeModules < 0) { + return undefined; + } + + let relativeFileName: string; + if (sourceDirectory.indexOf(moduleFileName.substring(0, indexOfNodeModules - 1)) === 0) { + // if node_modules folder is in this folder or any of its parent folder, no need to keep it. + relativeFileName = moduleFileName.substring(indexOfNodeModules + 13 /* "node_modules\".length */); + } + else { + relativeFileName = getRelativePath(moduleFileName, sourceDirectory); + } + + relativeFileName = removeFileExtension(relativeFileName); + if (endsWith(relativeFileName, "/index")) { + relativeFileName = getDirectoryPath(relativeFileName); + } + else { + try { + const moduleDirectory = getDirectoryPath(moduleFileName); + const packageJsonContent = JSON.parse(context.host.readFile(combinePaths(moduleDirectory, "package.json"))); + if (packageJsonContent) { + const mainFile = packageJsonContent.main || packageJsonContent.typings; + if (mainFile) { + const mainExportFile = toPath(mainFile, moduleDirectory, getCanonicalFileName); + if (removeFileExtension(mainExportFile) === removeFileExtension(moduleFileName)) { + relativeFileName = getDirectoryPath(relativeFileName); + } + } + } + } + catch (e) { } + } + + return relativeFileName; } } + function getPathRelativeToRootDirs(path: string, rootDirs: string[]) { + for (const rootDir of rootDirs) { + const relativeName = getRelativePathIfInDirectory(path, rootDir); + if (relativeName !== undefined) { + return relativeName; + } + } + return undefined; + } + + function removeExtensionAndIndexPostFix(fileName: string) { + fileName = removeFileExtension(fileName); + if (endsWith(fileName, "/index")) { + fileName = fileName.substr(0, fileName.length - 6/* "/index".length */); + } + return fileName; + } + + function getRelativePathIfInDirectory(path: string, directoryPath: string) { + const relativePath = getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); + return isRootedDiskPath(relativePath) || startsWith(relativePath, "..") ? undefined : relativePath; + } + + function getRelativePath(path: string, directoryPath: string) { + const relativePath = getRelativePathToDirectoryOrUrl(directoryPath, path, directoryPath, getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); + return moduleHasNonRelativeName(relativePath) ? "./" + relativePath : relativePath; + } } - function createChangeTracker() { - return textChanges.ChangeTracker.fromCodeFixContext(context); - } - - function createCodeAction( - description: DiagnosticMessage, - diagnosticArgs: string[], - changes: FileTextChanges[], - kind: ImportCodeActionKind, - moduleSpecifier?: string): ImportCodeAction { - return { - description: formatMessage.apply(undefined, [undefined, description].concat(diagnosticArgs)), - changes, - kind, - moduleSpecifier - }; - } } - }); + + function createChangeTracker() { + return textChanges.ChangeTracker.fromCodeFixContext(context); + } + + function createCodeAction( + description: DiagnosticMessage, + diagnosticArgs: string[], + changes: FileTextChanges[], + kind: ImportCodeActionKind, + moduleSpecifier?: string): ImportCodeAction { + return { + description: formatMessage.apply(undefined, [undefined, description].concat(diagnosticArgs)), + changes, + kind, + moduleSpecifier + }; + } + } } From ac7429535ee37934d722d91dff989eba4a52f600 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 3 May 2017 08:05:40 -0700 Subject: [PATCH 23/92] Mark type arguments as used even if used in an invalid way --- src/compiler/checker.ts | 36 ++++-- ...ressionWithMissingTypeArgument1.errors.txt | 10 +- .../reference/functionCalls.errors.txt | 5 +- .../reference/parserAmbiguity1.errors.txt | 10 +- ...serAmbiguityWithBinaryOperator4.errors.txt | 8 +- .../parserGenericConstraint4.errors.txt | 5 +- .../parserGenericConstraint5.errors.txt | 5 +- .../parserGenericConstraint6.errors.txt | 5 +- .../parserGenericConstraint7.errors.txt | 5 +- .../parserGenericsInTypeContexts1.errors.txt | 26 +++- .../parserGenericsInTypeContexts2.errors.txt | 122 +++++++++++++++++- ...rGenericsInVariableDeclaration1.errors.txt | 40 +++++- .../parserMemberAccessExpression1.errors.txt | 17 ++- .../parserMissingLambdaOpenBrace1.errors.txt | 8 +- .../parserSkippedTokens20.errors.txt | 5 +- .../parserSuperExpression2.errors.txt | 5 +- .../parserSuperExpression3.errors.txt | 5 +- .../unusedInvalidTypeArguments.errors.txt | 78 +++++++++++ .../reference/unusedInvalidTypeArguments.js | 122 ++++++++++++++++++ .../compiler/unusedInvalidTypeArguments.ts | 46 +++++++ 20 files changed, 534 insertions(+), 29 deletions(-) create mode 100644 tests/baselines/reference/unusedInvalidTypeArguments.errors.txt create mode 100644 tests/baselines/reference/unusedInvalidTypeArguments.js create mode 100644 tests/cases/compiler/unusedInvalidTypeArguments.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ca5d65068a0..b6ff059380e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4714,7 +4714,7 @@ namespace ts { // When base constructor type is a class with no captured type arguments we know that the constructors all have the same type parameters as the // class and all return the instance type of the class. There is no need for further checks and we can apply the // type arguments in the same manner as a type reference to get the same error reporting experience. - baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol); + baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol, typeArgumentsFromTypeReferenceNode(baseTypeNode)); } else if (baseConstructorType.flags & TypeFlags.Any) { baseType = baseConstructorType; @@ -5238,7 +5238,7 @@ namespace ts { } const baseTypeNode = getBaseTypeNodeOfClass(classType); const isJavaScript = isInJavaScriptFile(baseTypeNode); - const typeArguments = map(baseTypeNode.typeArguments, getTypeFromTypeNode); + const typeArguments = typeArgumentsFromTypeReferenceNode(baseTypeNode); const typeArgCount = length(typeArguments); const result: Signature[] = []; for (const baseSig of baseSignatures) { @@ -6501,7 +6501,7 @@ namespace ts { } // Get type from reference to class or interface - function getTypeFromClassOrInterfaceReference(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference, symbol: Symbol): Type { + function getTypeFromClassOrInterfaceReference(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference, symbol: Symbol, typeArgs: Type[]): Type { const type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); const typeParameters = type.localTypeParameters; if (typeParameters) { @@ -6520,7 +6520,7 @@ namespace ts { // In a type reference, the outer type parameters of the referenced class or interface are automatically // supplied as type arguments and the type reference only specifies arguments for the local type parameters // of the class or interface. - const typeArguments = concatenate(type.outerTypeParameters, fillMissingTypeArguments(map(node.typeArguments, getTypeFromTypeNode), typeParameters, minTypeArgumentCount, node)); + const typeArguments = concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgs, typeParameters, minTypeArgumentCount, node)); return createTypeReference(type, typeArguments); } if (node.typeArguments) { @@ -6545,7 +6545,7 @@ namespace ts { // Get type from reference to type alias. When a type alias is generic, the declared type of the type alias may include // references to the type parameters of the alias. We replace those with the actual type arguments by instantiating the // declared type. Instantiations are cached using the type identities of the type arguments as the key. - function getTypeFromTypeAliasReference(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference, symbol: Symbol): Type { + function getTypeFromTypeAliasReference(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference, symbol: Symbol, typeArguments: Type[]): Type { const type = getDeclaredTypeOfSymbol(symbol); const typeParameters = getSymbolLinks(symbol).typeParameters; if (typeParameters) { @@ -6561,7 +6561,6 @@ namespace ts { typeParameters.length); return unknownType; } - const typeArguments = map(node.typeArguments, getTypeFromTypeNode); return getTypeAliasInstantiation(symbol, typeArguments); } if (node.typeArguments) { @@ -6609,16 +6608,18 @@ namespace ts { } function getTypeReferenceType(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference, symbol: Symbol) { + const typeArguments = typeArgumentsFromTypeReferenceNode(node); // Do unconditionally so we mark type arguments as referenced. + if (symbol === unknownSymbol) { return unknownType; } if (symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { - return getTypeFromClassOrInterfaceReference(node, symbol); + return getTypeFromClassOrInterfaceReference(node, symbol, typeArguments); } if (symbol.flags & SymbolFlags.TypeAlias) { - return getTypeFromTypeAliasReference(node, symbol); + return getTypeFromTypeAliasReference(node, symbol, typeArguments); } if (symbol.flags & SymbolFlags.Value && node.kind === SyntaxKind.JSDocTypeReference) { @@ -6686,9 +6687,10 @@ namespace ts { ? (node).expression : undefined; symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, SymbolFlags.Type) || unknownSymbol; + const typeArguments = typeArgumentsFromTypeReferenceNode(node); type = symbol === unknownSymbol ? unknownType : - symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface) ? getTypeFromClassOrInterfaceReference(node, symbol) : - symbol.flags & SymbolFlags.TypeAlias ? getTypeFromTypeAliasReference(node, symbol) : + symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface) ? getTypeFromClassOrInterfaceReference(node, symbol, typeArguments) : + symbol.flags & SymbolFlags.TypeAlias ? getTypeFromTypeAliasReference(node, symbol, typeArguments) : getTypeFromNonGenericTypeReference(node, symbol); } // Cache both the resolved symbol and the resolved type. The resolved symbol is needed in when we check the @@ -6699,6 +6701,10 @@ namespace ts { return links.resolvedType; } + function typeArgumentsFromTypeReferenceNode(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference): Type[] { + return map(node.typeArguments, getTypeFromTypeNode); + } + function getTypeFromTypeQueryNode(node: TypeQueryNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { @@ -14303,7 +14309,17 @@ namespace ts { return true; } + function callLikeExpressionMayHaveTypeArguments(node: CallLikeExpression): node is CallExpression | NewExpression { + return node.kind === SyntaxKind.CallExpression || node.kind === SyntaxKind.NewExpression; + } + function resolveUntypedCall(node: CallLikeExpression): Signature { + if (callLikeExpressionMayHaveTypeArguments(node)) { + // Check type arguments even though we will give an error that untyped calls may not accept type arguments. + // This gets us diagnostics for the type arguments and marks them as referenced. + forEach(node.typeArguments, checkSourceElement); + } + if (node.kind === SyntaxKind.TaggedTemplateExpression) { checkExpression((node).template); } diff --git a/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt index aef540d958a..9ac8c650e00 100644 --- a/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt +++ b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt @@ -1,10 +1,16 @@ tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,1): error TS2304: Cannot find name 'Foo'. +tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,5): error TS2304: Cannot find name 'a'. tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,7): error TS1110: Type expected. +tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,8): error TS2304: Cannot find name 'b'. -==== tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts (2 errors) ==== +==== tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts (4 errors) ==== Foo(); ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'a'. ~ -!!! error TS1110: Type expected. \ No newline at end of file +!!! error TS1110: Type expected. + ~ +!!! error TS2304: Cannot find name 'b'. \ No newline at end of file diff --git a/tests/baselines/reference/functionCalls.errors.txt b/tests/baselines/reference/functionCalls.errors.txt index 85e75876779..8e84aa81e0e 100644 --- a/tests/baselines/reference/functionCalls.errors.txt +++ b/tests/baselines/reference/functionCalls.errors.txt @@ -1,6 +1,7 @@ tests/cases/conformance/expressions/functionCalls/functionCalls.ts(8,1): error TS2347: Untyped function calls may not accept type arguments. tests/cases/conformance/expressions/functionCalls/functionCalls.ts(9,1): error TS2347: Untyped function calls may not accept type arguments. tests/cases/conformance/expressions/functionCalls/functionCalls.ts(10,1): error TS2347: Untyped function calls may not accept type arguments. +tests/cases/conformance/expressions/functionCalls/functionCalls.ts(10,8): error TS2304: Cannot find name 'Window'. tests/cases/conformance/expressions/functionCalls/functionCalls.ts(25,1): error TS2347: Untyped function calls may not accept type arguments. tests/cases/conformance/expressions/functionCalls/functionCalls.ts(26,1): error TS2347: Untyped function calls may not accept type arguments. tests/cases/conformance/expressions/functionCalls/functionCalls.ts(27,1): error TS2347: Untyped function calls may not accept type arguments. @@ -9,7 +10,7 @@ tests/cases/conformance/expressions/functionCalls/functionCalls.ts(33,1): error tests/cases/conformance/expressions/functionCalls/functionCalls.ts(34,1): error TS2347: Untyped function calls may not accept type arguments. -==== tests/cases/conformance/expressions/functionCalls/functionCalls.ts (9 errors) ==== +==== tests/cases/conformance/expressions/functionCalls/functionCalls.ts (10 errors) ==== // Invoke function call on value of type 'any' with no type arguments var anyVar: any; anyVar(0); @@ -26,6 +27,8 @@ tests/cases/conformance/expressions/functionCalls/functionCalls.ts(34,1): error anyVar(undefined); ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2347: Untyped function calls may not accept type arguments. + ~~~~~~ +!!! error TS2304: Cannot find name 'Window'. // Invoke function call on value of a subtype of Function with no call signatures with no type arguments diff --git a/tests/baselines/reference/parserAmbiguity1.errors.txt b/tests/baselines/reference/parserAmbiguity1.errors.txt index 00126360794..a5360161147 100644 --- a/tests/baselines/reference/parserAmbiguity1.errors.txt +++ b/tests/baselines/reference/parserAmbiguity1.errors.txt @@ -1,10 +1,16 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts(1,1): error TS2304: Cannot find name 'f'. tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts(1,3): error TS2304: Cannot find name 'g'. +tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts(1,5): error TS2304: Cannot find name 'A'. +tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts(1,8): error TS2304: Cannot find name 'B'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguity1.ts (4 errors) ==== f(g(7)); ~ !!! error TS2304: Cannot find name 'f'. ~ -!!! error TS2304: Cannot find name 'g'. \ No newline at end of file +!!! error TS2304: Cannot find name 'g'. + ~ +!!! error TS2304: Cannot find name 'A'. + ~ +!!! error TS2304: Cannot find name 'B'. \ No newline at end of file diff --git a/tests/baselines/reference/parserAmbiguityWithBinaryOperator4.errors.txt b/tests/baselines/reference/parserAmbiguityWithBinaryOperator4.errors.txt index 2c7bef61598..41147305ce0 100644 --- a/tests/baselines/reference/parserAmbiguityWithBinaryOperator4.errors.txt +++ b/tests/baselines/reference/parserAmbiguityWithBinaryOperator4.errors.txt @@ -1,10 +1,16 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguityWithBinaryOperator4.ts(3,9): error TS2347: Untyped function calls may not accept type arguments. +tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguityWithBinaryOperator4.ts(3,11): error TS2304: Cannot find name 'b'. +tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguityWithBinaryOperator4.ts(3,14): error TS2304: Cannot find name 'b'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguityWithBinaryOperator4.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserAmbiguityWithBinaryOperator4.ts (3 errors) ==== function g() { var a, b, c; if (a(c + 1)) { } ~~~~~~~~~~~~~~ !!! error TS2347: Untyped function calls may not accept type arguments. + ~ +!!! error TS2304: Cannot find name 'b'. + ~ +!!! error TS2304: Cannot find name 'b'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericConstraint4.errors.txt b/tests/baselines/reference/parserGenericConstraint4.errors.txt index b42570593f7..f829bad913f 100644 --- a/tests/baselines/reference/parserGenericConstraint4.errors.txt +++ b/tests/baselines/reference/parserGenericConstraint4.errors.txt @@ -1,8 +1,11 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint4.ts(1,19): error TS2304: Cannot find name 'List'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint4.ts(1,24): error TS2304: Cannot find name 'List'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint4.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint4.ts (2 errors) ==== class C > > { ~~~~ +!!! error TS2304: Cannot find name 'List'. + ~~~~ !!! error TS2304: Cannot find name 'List'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericConstraint5.errors.txt b/tests/baselines/reference/parserGenericConstraint5.errors.txt index 3479731ae13..a20e617f5e6 100644 --- a/tests/baselines/reference/parserGenericConstraint5.errors.txt +++ b/tests/baselines/reference/parserGenericConstraint5.errors.txt @@ -1,8 +1,11 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint5.ts(1,19): error TS2304: Cannot find name 'List'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint5.ts(1,24): error TS2304: Cannot find name 'List'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint5.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint5.ts (2 errors) ==== class C> > { ~~~~ +!!! error TS2304: Cannot find name 'List'. + ~~~~ !!! error TS2304: Cannot find name 'List'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericConstraint6.errors.txt b/tests/baselines/reference/parserGenericConstraint6.errors.txt index 5efbcc8e8d0..be90daff826 100644 --- a/tests/baselines/reference/parserGenericConstraint6.errors.txt +++ b/tests/baselines/reference/parserGenericConstraint6.errors.txt @@ -1,8 +1,11 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint6.ts(1,19): error TS2304: Cannot find name 'List'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint6.ts(1,24): error TS2304: Cannot find name 'List'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint6.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint6.ts (2 errors) ==== class C >> { ~~~~ +!!! error TS2304: Cannot find name 'List'. + ~~~~ !!! error TS2304: Cannot find name 'List'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericConstraint7.errors.txt b/tests/baselines/reference/parserGenericConstraint7.errors.txt index ffff8ea2583..99054892fc0 100644 --- a/tests/baselines/reference/parserGenericConstraint7.errors.txt +++ b/tests/baselines/reference/parserGenericConstraint7.errors.txt @@ -1,8 +1,11 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint7.ts(1,19): error TS2304: Cannot find name 'List'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint7.ts(1,24): error TS2304: Cannot find name 'List'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint7.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericConstraint7.ts (2 errors) ==== class C>> { ~~~~ +!!! error TS2304: Cannot find name 'List'. + ~~~~ !!! error TS2304: Cannot find name 'List'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt b/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt index 477cc3edcdc..e98b618d78c 100644 --- a/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt +++ b/tests/baselines/reference/parserGenericsInTypeContexts1.errors.txt @@ -1,47 +1,71 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(1,17): error TS2304: Cannot find name 'A'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(1,33): error TS2304: Cannot find name 'B'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(1,35): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(4,9): error TS2315: Type 'C' is not generic. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(4,11): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(5,9): error TS2304: Cannot find name 'D'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(5,11): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(6,9): error TS2503: Cannot find namespace 'E'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(6,13): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(7,9): error TS2503: Cannot find namespace 'G'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(7,15): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(8,9): error TS2304: Cannot find name 'K'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(8,11): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(11,16): error TS2304: Cannot find name 'E'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(11,18): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(14,16): error TS2304: Cannot find name 'F'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts(14,18): error TS2304: Cannot find name 'T'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts (9 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts1.ts (17 errors) ==== class C extends A implements B { ~ !!! error TS2304: Cannot find name 'A'. ~ !!! error TS2304: Cannot find name 'B'. + ~ +!!! error TS2304: Cannot find name 'T'. } var v1: C; ~~~~ !!! error TS2315: Type 'C' is not generic. + ~ +!!! error TS2304: Cannot find name 'T'. var v2: D = null; ~ !!! error TS2304: Cannot find name 'D'. + ~ +!!! error TS2304: Cannot find name 'T'. var v3: E.F; ~ !!! error TS2503: Cannot find namespace 'E'. + ~ +!!! error TS2304: Cannot find name 'T'. var v3: G.H.I; ~ !!! error TS2503: Cannot find namespace 'G'. + ~ +!!! error TS2304: Cannot find name 'T'. var v6: K[]; ~ !!! error TS2304: Cannot find name 'K'. + ~ +!!! error TS2304: Cannot find name 'T'. function f1(a: E) { ~ !!! error TS2304: Cannot find name 'E'. + ~ +!!! error TS2304: Cannot find name 'T'. } function f2(): F { ~ !!! error TS2304: Cannot find name 'F'. + ~ +!!! error TS2304: Cannot find name 'T'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt b/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt index f686b56bf89..79acb0fb6fd 100644 --- a/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt +++ b/tests/baselines/reference/parserGenericsInTypeContexts2.errors.txt @@ -1,47 +1,167 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,17): error TS2304: Cannot find name 'A'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,45): error TS2304: Cannot find name 'B'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,47): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,49): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,53): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,55): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(1,57): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,9): error TS2315: Type 'C' is not generic. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,11): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,13): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,17): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,19): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(4,21): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,9): error TS2304: Cannot find name 'D'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,11): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,13): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,17): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,19): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(5,21): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,9): error TS2503: Cannot find namespace 'E'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,13): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,15): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,19): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,21): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(6,23): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,9): error TS2503: Cannot find namespace 'G'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,15): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,17): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,21): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,23): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(7,25): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,9): error TS2304: Cannot find name 'K'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,11): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,13): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,17): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,19): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(8,21): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,16): error TS2304: Cannot find name 'E'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,18): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,20): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,24): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,26): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(11,28): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,16): error TS2304: Cannot find name 'F'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,18): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,20): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,24): error TS2304: Cannot find name 'Y'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,26): error TS2304: Cannot find name 'Z'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts(14,28): error TS2304: Cannot find name 'T'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts (9 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInTypeContexts2.ts (49 errors) ==== class C extends A, Y>> implements B, Y>> { ~ !!! error TS2304: Cannot find name 'A'. ~ !!! error TS2304: Cannot find name 'B'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. } var v1: C, Y>>; ~~~~~~~~~~~~~~~~ !!! error TS2315: Type 'C' is not generic. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. var v2: D, Y>> = null; ~ !!! error TS2304: Cannot find name 'D'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. var v3: E.F, Y>>; ~ !!! error TS2503: Cannot find namespace 'E'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. var v4: G.H.I, Y>>; ~ !!! error TS2503: Cannot find namespace 'G'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. var v6: K, Y>>[]; ~ !!! error TS2304: Cannot find name 'K'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. function f1(a: E, Y>>) { ~ !!! error TS2304: Cannot find name 'E'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. } function f2(): F, Y>> { ~ !!! error TS2304: Cannot find name 'F'. + ~ +!!! error TS2304: Cannot find name 'X'. + ~ +!!! error TS2304: Cannot find name 'T'. + ~ +!!! error TS2304: Cannot find name 'Y'. + ~ +!!! error TS2304: Cannot find name 'Z'. + ~ +!!! error TS2304: Cannot find name 'T'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserGenericsInVariableDeclaration1.errors.txt b/tests/baselines/reference/parserGenericsInVariableDeclaration1.errors.txt index 42f013cb250..6345f1ce34e 100644 --- a/tests/baselines/reference/parserGenericsInVariableDeclaration1.errors.txt +++ b/tests/baselines/reference/parserGenericsInVariableDeclaration1.errors.txt @@ -1,29 +1,65 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(1,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(1,13): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(2,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(2,13): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(4,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(4,13): error TS2304: Cannot find name 'Bar'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(4,17): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(5,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(5,13): error TS2304: Cannot find name 'Bar'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(5,17): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(7,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(7,13): error TS2304: Cannot find name 'Bar'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(7,17): error TS2304: Cannot find name 'Quux'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(7,22): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(8,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(8,13): error TS2304: Cannot find name 'Bar'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(8,17): error TS2304: Cannot find name 'Quux'. +tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts(8,22): error TS2304: Cannot find name 'T'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts (6 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserGenericsInVariableDeclaration1.ts (18 errors) ==== var v : Foo = 1; ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. var v : Foo= 1; ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. var v : Foo> = 1; ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. + ~ +!!! error TS2304: Cannot find name 'T'. var v : Foo>= 1; ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. + ~ +!!! error TS2304: Cannot find name 'T'. var v : Foo>> = 1; ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. + ~~~~ +!!! error TS2304: Cannot find name 'Quux'. + ~ +!!! error TS2304: Cannot find name 'T'. var v : Foo>>= 1; ~~~ -!!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file +!!! error TS2304: Cannot find name 'Foo'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. + ~~~~ +!!! error TS2304: Cannot find name 'Quux'. + ~ +!!! error TS2304: Cannot find name 'T'. \ No newline at end of file diff --git a/tests/baselines/reference/parserMemberAccessExpression1.errors.txt b/tests/baselines/reference/parserMemberAccessExpression1.errors.txt index 2006f5ac6d6..4e3e41770fe 100644 --- a/tests/baselines/reference/parserMemberAccessExpression1.errors.txt +++ b/tests/baselines/reference/parserMemberAccessExpression1.errors.txt @@ -1,25 +1,36 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(1,1): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(1,5): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(2,1): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(2,9): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,1): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,5): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,7): error TS1005: '(' expected. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,8): error TS2304: Cannot find name 'Bar'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,13): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,1): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,5): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,7): error TS1005: '(' expected. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,8): error TS2304: Cannot find name 'Bar'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,12): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,16): error TS1005: ')' expected. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts (10 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts (15 errors) ==== Foo(); ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. Foo.Bar(); ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. Foo.Bar(); ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. ~ !!! error TS1005: '(' expected. ~~~ @@ -29,10 +40,14 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression Foo.Bar(); ~~~ !!! error TS2304: Cannot find name 'Foo'. + ~ +!!! error TS2304: Cannot find name 'T'. ~ !!! error TS1005: '(' expected. ~~~ !!! error TS2304: Cannot find name 'Bar'. + ~ +!!! error TS2304: Cannot find name 'T'. ~ !!! error TS1005: ')' expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserMissingLambdaOpenBrace1.errors.txt b/tests/baselines/reference/parserMissingLambdaOpenBrace1.errors.txt index d39986c9c01..728295b76cb 100644 --- a/tests/baselines/reference/parserMissingLambdaOpenBrace1.errors.txt +++ b/tests/baselines/reference/parserMissingLambdaOpenBrace1.errors.txt @@ -1,17 +1,23 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(2,19): error TS2304: Cannot find name 'Iterator'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(2,28): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(2,42): error TS2304: Cannot find name 'Query'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(2,48): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(3,16): error TS2304: Cannot find name 'fromDoWhile'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(4,13): error TS1005: '{' expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts(5,25): error TS2339: Property 'doWhile' does not exist on type 'C'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts (5 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserMissingLambdaOpenBrace1.ts (7 errors) ==== class C { where(filter: Iterator): Query { ~~~~~~~~ !!! error TS2304: Cannot find name 'Iterator'. + ~ +!!! error TS2304: Cannot find name 'T'. ~~~~~ !!! error TS2304: Cannot find name 'Query'. + ~ +!!! error TS2304: Cannot find name 'T'. return fromDoWhile(test => ~~~~~~~~~~~ !!! error TS2304: Cannot find name 'fromDoWhile'. diff --git a/tests/baselines/reference/parserSkippedTokens20.errors.txt b/tests/baselines/reference/parserSkippedTokens20.errors.txt index 774443d4d9a..d32f25a26b3 100644 --- a/tests/baselines/reference/parserSkippedTokens20.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens20.errors.txt @@ -1,10 +1,13 @@ tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens20.ts(1,8): error TS2304: Cannot find name 'X'. +tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens20.ts(1,10): error TS2304: Cannot find name 'T'. tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens20.ts(1,12): error TS1127: Invalid character. -==== tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens20.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/SkippedTokens/parserSkippedTokens20.ts (3 errors) ==== var v: X(0); @@ -10,5 +11,7 @@ tests/cases/conformance/parser/ecmascript5/SuperExpressions/parserSuperExpressio !!! error TS2335: 'super' can only be referenced in a derived class. ~ !!! error TS1034: 'super' must be followed by an argument list or member access. + ~ +!!! error TS2304: Cannot find name 'T'. } } \ No newline at end of file diff --git a/tests/baselines/reference/parserSuperExpression3.errors.txt b/tests/baselines/reference/parserSuperExpression3.errors.txt index 2fd81b29957..13faa304097 100644 --- a/tests/baselines/reference/parserSuperExpression3.errors.txt +++ b/tests/baselines/reference/parserSuperExpression3.errors.txt @@ -1,11 +1,14 @@ tests/cases/conformance/parser/ecmascript5/SuperExpressions/parserSuperExpression3.ts(3,10): error TS2339: Property 'super' does not exist on type 'C'. +tests/cases/conformance/parser/ecmascript5/SuperExpressions/parserSuperExpression3.ts(3,16): error TS2304: Cannot find name 'T'. -==== tests/cases/conformance/parser/ecmascript5/SuperExpressions/parserSuperExpression3.ts (1 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/SuperExpressions/parserSuperExpression3.ts (2 errors) ==== class C { M() { this.super(0); ~~~~~ !!! error TS2339: Property 'super' does not exist on type 'C'. + ~ +!!! error TS2304: Cannot find name 'T'. } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedInvalidTypeArguments.errors.txt b/tests/baselines/reference/unusedInvalidTypeArguments.errors.txt new file mode 100644 index 00000000000..bd78839ab21 --- /dev/null +++ b/tests/baselines/reference/unusedInvalidTypeArguments.errors.txt @@ -0,0 +1,78 @@ +/call.ts(1,21): error TS2307: Cannot find module 'unknown'. +/callAny.ts(3,1): error TS2347: Untyped function calls may not accept type arguments. +/callAny.ts(4,1): error TS2347: Untyped function calls may not accept type arguments. +/callAny.ts(4,3): error TS2304: Cannot find name 'InvalidReference'. +/classReference.ts(4,24): error TS2315: Type 'C' is not generic. +/interface.ts(1,21): error TS2307: Cannot find module 'unknown'. +/new.ts(1,21): error TS2307: Cannot find module 'unkown'. +/super.ts(1,19): error TS2307: Cannot find module 'unknown'. +/super.ts(8,17): error TS2304: Cannot find name 'InvalidReference'. +/typeReference.ts(6,17): error TS2315: Type 'U' is not generic. + + +==== /typeReference.ts (1 errors) ==== + // Tests that types are marked as used, even if used in places that don't accept type arguments. + + + type N = number; + type U = number; + export type Z = U; + ~~~~ +!!! error TS2315: Type 'U' is not generic. + +==== /classReference.ts (1 errors) ==== + type N = number; + class C { } + // This uses getTypeFromClassOrInterfaceReference instead of getTypeFromTypeAliasReference. + export class D extends C {} + ~~~~ +!!! error TS2315: Type 'C' is not generic. + +==== /interface.ts (1 errors) ==== + import { Foo } from "unknown"; + ~~~~~~~~~ +!!! error TS2307: Cannot find module 'unknown'. + export interface I { x: Foo; } + +==== /call.ts (1 errors) ==== + import { foo } from "unknown"; + ~~~~~~~~~ +!!! error TS2307: Cannot find module 'unknown'. + type T = number; + foo(); + +==== /new.ts (1 errors) ==== + import { Foo } from "unkown"; + ~~~~~~~~ +!!! error TS2307: Cannot find module 'unkown'. + type T = number; + new Foo(); + +==== /callAny.ts (3 errors) ==== + declare var g: any; + type U = number; + g(); + ~~~~~~ +!!! error TS2347: Untyped function calls may not accept type arguments. + g(); // Should get error for type argument + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2347: Untyped function calls may not accept type arguments. + ~~~~~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'InvalidReference'. + +==== /super.ts (2 errors) ==== + import { C } from "unknown"; + ~~~~~~~~~ +!!! error TS2307: Cannot find module 'unknown'. + + type T = number; + + export class D extends C { + m() { + super.m(1); + super.m(); // Should get error for type argument + ~~~~~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'InvalidReference'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/unusedInvalidTypeArguments.js b/tests/baselines/reference/unusedInvalidTypeArguments.js new file mode 100644 index 00000000000..955845ea01a --- /dev/null +++ b/tests/baselines/reference/unusedInvalidTypeArguments.js @@ -0,0 +1,122 @@ +//// [tests/cases/compiler/unusedInvalidTypeArguments.ts] //// + +//// [typeReference.ts] +// Tests that types are marked as used, even if used in places that don't accept type arguments. + + +type N = number; +type U = number; +export type Z = U; + +//// [classReference.ts] +type N = number; +class C { } +// This uses getTypeFromClassOrInterfaceReference instead of getTypeFromTypeAliasReference. +export class D extends C {} + +//// [interface.ts] +import { Foo } from "unknown"; +export interface I { x: Foo; } + +//// [call.ts] +import { foo } from "unknown"; +type T = number; +foo(); + +//// [new.ts] +import { Foo } from "unkown"; +type T = number; +new Foo(); + +//// [callAny.ts] +declare var g: any; +type U = number; +g(); +g(); // Should get error for type argument + +//// [super.ts] +import { C } from "unknown"; + +type T = number; + +export class D extends C { + m() { + super.m(1); + super.m(); // Should get error for type argument + } +} + + +//// [typeReference.js] +"use strict"; +// Tests that types are marked as used, even if used in places that don't accept type arguments. +exports.__esModule = true; +//// [classReference.js] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var C = (function () { + function C() { + } + return C; +}()); +// This uses getTypeFromClassOrInterfaceReference instead of getTypeFromTypeAliasReference. +var D = (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + return D; +}(C)); +exports.D = D; +//// [interface.js] +"use strict"; +exports.__esModule = true; +//// [call.js] +"use strict"; +exports.__esModule = true; +var unknown_1 = require("unknown"); +unknown_1.foo(); +//// [new.js] +"use strict"; +exports.__esModule = true; +var unkown_1 = require("unkown"); +new unkown_1.Foo(); +//// [callAny.js] +g(); +g(); // Should get error for type argument +//// [super.js] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var unknown_1 = require("unknown"); +var D = (function (_super) { + __extends(D, _super); + function D() { + return _super !== null && _super.apply(this, arguments) || this; + } + D.prototype.m = function () { + _super.prototype.m.call(this, 1); + _super.prototype.m.call(this); // Should get error for type argument + }; + return D; +}(unknown_1.C)); +exports.D = D; diff --git a/tests/cases/compiler/unusedInvalidTypeArguments.ts b/tests/cases/compiler/unusedInvalidTypeArguments.ts new file mode 100644 index 00000000000..d0bcf0519a7 --- /dev/null +++ b/tests/cases/compiler/unusedInvalidTypeArguments.ts @@ -0,0 +1,46 @@ +// Tests that types are marked as used, even if used in places that don't accept type arguments. + +// @noUnusedLocals: true + +// @Filename: /typeReference.ts +type N = number; +type U = number; +export type Z = U; + +// @Filename: /classReference.ts +type N = number; +class C { } +// This uses getTypeFromClassOrInterfaceReference instead of getTypeFromTypeAliasReference. +export class D extends C {} + +// @Filename: /interface.ts +import { Foo } from "unknown"; +export interface I { x: Foo; } + +// @Filename: /call.ts +import { foo } from "unknown"; +type T = number; +foo(); + +// @Filename: /new.ts +import { Foo } from "unkown"; +type T = number; +new Foo(); + +// @Filename: /callAny.ts +declare var g: any; +type U = number; +g(); +g(); // Should get error for type argument + +// @Filename: /super.ts +import { C } from "unknown"; + +type T = number; + +export class D extends C { + m() { + super.m(1); + super.m(); // Should get error for type argument + } +} From ee1edf0421b2bda322ed7fc1ae3bfe07a110ed98 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Wed, 3 May 2017 09:42:19 -0700 Subject: [PATCH 24/92] Lower allowed levenshtein distance for suggestions And update baselines --- src/compiler/checker.ts | 18 +++++--- ...akInIterationOrSwitchStatement4.errors.txt | 4 +- ...torWithIncompleteTypeAnnotation.errors.txt | 16 +++---- .../continueInIterationStatement4.errors.txt | 4 +- .../reference/fixSignatureCaching.errors.txt | 12 ++--- .../letDeclarations-scopes2.errors.txt | 8 ++-- ...mUsingES6FeaturesWithOnlyES5Lib.errors.txt | 4 +- .../reference/parser10.1.1-8gs.errors.txt | 4 +- .../reference/parserRealSource11.errors.txt | 32 +++++++------- .../reference/parserRealSource7.errors.txt | 12 ++--- .../reference/parserRealSource8.errors.txt | 16 +++---- .../parserUnterminatedGeneric2.errors.txt | 4 +- ...akInIterationOrSwitchStatement4.errors.txt | 4 +- ...r_continueInIterationStatement4.errors.txt | 4 +- .../reference/parserharness.errors.txt | 16 +++---- .../reference/parserindenter.errors.txt | 12 ++--- .../reference/scanner10.1.1-8gs.errors.txt | 4 +- .../reference/scannertest1.errors.txt | 44 +++++++++---------- .../typeGuardFunctionErrors.errors.txt | 20 ++++----- .../reference/undeclaredMethod.errors.txt | 4 +- 20 files changed, 123 insertions(+), 119 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 76ff43f20e2..ca9ac8e09ea 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14197,13 +14197,15 @@ namespace ts { * except for candidates: * * With no name * * Whose meaning doesn't match the `meaning` parameter. - * * Whose length differs from the target name by more than 3. - * * Whose levenshtein distance is more than 0.7 of the length of the name - * (0.7 allows identifiers of length 3 to have a distance of 2 to allow for one substitution) + * * Whose length differs from the target name by more than 0.3 of the length of the name. + * * Whose levenshtein distance is more than 0.4 of the length of the name + * (0.4 allows 1 substitution/transposition for every 5 characters, + * and 1 insertion/deletion at 3 characters) * Names longer than 30 characters don't get suggestions because Levenshtein distance is an n**2 algorithm. */ function getSpellingSuggestionForName(name: string, symbols: Symbol[], meaning: SymbolFlags): Symbol | undefined { - const worstDistance = name.length * 0.7; + const worstDistance = name.length * 0.4; + const maximumLengthDifference = Math.min(4, name.length * 0.34); let bestDistance = Number.MAX_VALUE; let bestCandidate = undefined; if (name.length > 30) { @@ -14211,16 +14213,18 @@ namespace ts { } name = name.toLowerCase(); for (const candidate of symbols) { - if (candidate.flags & meaning && candidate.name && Math.abs(candidate.name.length - name.length) < 4) { + if (candidate.flags & meaning && + candidate.name && + Math.abs(candidate.name.length - name.length) < maximumLengthDifference) { const candidateName = candidate.name.toLowerCase(); if (candidateName === name) { return candidate; } - if (candidateName.length < 3) { + if (candidateName.length < 3 || name.length < 3) { continue; } const distance = levenshtein(candidateName, name); - if (distance < 2) { + if (distance < 3) { return candidate; } else if (distance < bestDistance && distance < worstDistance) { diff --git a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt index 44e2d197f5a..c331ff09c2c 100644 --- a/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt +++ b/tests/baselines/reference/breakInIterationOrSwitchStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/breakInIterationOrSwitchStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? +tests/cases/compiler/breakInIterationOrSwitchStatement4.ts(1,15): error TS2304: Cannot find name 'something'. ==== tests/cases/compiler/breakInIterationOrSwitchStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? +!!! error TS2304: Cannot find name 'something'. break; } \ No newline at end of file diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index 99d1e48bf28..1f561036035 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -64,12 +64,12 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,21): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,44): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(254,69): error TS1110: Type expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,9): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,16): error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,26): error TS2552: Cannot find name 'value'. Did you mean 'eval'? +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,16): error TS2304: Cannot find name 'Overloads'. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,26): error TS2304: Cannot find name 'value'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,31): error TS1005: ',' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(256,33): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,9): error TS1128: Declaration or statement expected. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,16): error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,16): error TS2304: Cannot find name 'Overloads'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,27): error TS1135: Argument expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,33): error TS1005: '(' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,35): error TS2552: Cannot find name 'string'. Did you mean 'String'? @@ -80,7 +80,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(257,65): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,9): error TS2304: Cannot find name 'public'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,16): error TS1005: ';' expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,16): error TS2304: Cannot find name 'DefaultValue'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error TS2552: Cannot find name 'value'. Did you mean 'eval'? +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error TS2304: Cannot find name 'value'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,35): error TS1109: Expression expected. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2552: Cannot find name 'string'. Did you mean 'String'? tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,55): error TS1005: ';' expected. @@ -480,9 +480,9 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~ !!! error TS1128: Declaration or statement expected. ~~~~~~~~~ -!!! error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? +!!! error TS2304: Cannot find name 'Overloads'. ~~~~~ -!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? +!!! error TS2304: Cannot find name 'value'. ~ !!! error TS1005: ',' expected. ~~~~~~ @@ -491,7 +491,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~ !!! error TS1128: Declaration or statement expected. ~~~~~~~~~ -!!! error TS2552: Cannot find name 'Overloads'. Did you mean 'Overloading'? +!!! error TS2304: Cannot find name 'Overloads'. ~~~~~ !!! error TS1135: Argument expression expected. ~ @@ -515,7 +515,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(261,1): error TS ~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DefaultValue'. ~~~~~ -!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? +!!! error TS2304: Cannot find name 'value'. ~ !!! error TS1109: Expression expected. ~~~~~~ diff --git a/tests/baselines/reference/continueInIterationStatement4.errors.txt b/tests/baselines/reference/continueInIterationStatement4.errors.txt index 24bed78aeca..bbc20570547 100644 --- a/tests/baselines/reference/continueInIterationStatement4.errors.txt +++ b/tests/baselines/reference/continueInIterationStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/compiler/continueInIterationStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? +tests/cases/compiler/continueInIterationStatement4.ts(1,15): error TS2304: Cannot find name 'something'. ==== tests/cases/compiler/continueInIterationStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? +!!! error TS2304: Cannot find name 'something'. continue; } \ No newline at end of file diff --git a/tests/baselines/reference/fixSignatureCaching.errors.txt b/tests/baselines/reference/fixSignatureCaching.errors.txt index 573857d6cb2..7a5c43c966e 100644 --- a/tests/baselines/reference/fixSignatureCaching.errors.txt +++ b/tests/baselines/reference/fixSignatureCaching.errors.txt @@ -64,9 +64,9 @@ tests/cases/conformance/fixSignatureCaching.ts(970,18): error TS2339: Property ' tests/cases/conformance/fixSignatureCaching.ts(975,16): error TS2304: Cannot find name 'module'. tests/cases/conformance/fixSignatureCaching.ts(975,42): error TS2304: Cannot find name 'module'. tests/cases/conformance/fixSignatureCaching.ts(976,37): error TS2304: Cannot find name 'module'. -tests/cases/conformance/fixSignatureCaching.ts(977,23): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? -tests/cases/conformance/fixSignatureCaching.ts(977,48): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? -tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +tests/cases/conformance/fixSignatureCaching.ts(977,23): error TS2304: Cannot find name 'define'. +tests/cases/conformance/fixSignatureCaching.ts(977,48): error TS2304: Cannot find name 'define'. +tests/cases/conformance/fixSignatureCaching.ts(978,16): error TS2304: Cannot find name 'define'. tests/cases/conformance/fixSignatureCaching.ts(979,23): error TS2304: Cannot find name 'window'. tests/cases/conformance/fixSignatureCaching.ts(980,37): error TS2304: Cannot find name 'window'. @@ -1182,12 +1182,12 @@ tests/cases/conformance/fixSignatureCaching.ts(980,37): error TS2304: Cannot fin !!! error TS2304: Cannot find name 'module'. } else if (typeof define === 'function' && define.amd) { ~~~~~~ -!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +!!! error TS2304: Cannot find name 'define'. ~~~~~~ -!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +!!! error TS2304: Cannot find name 'define'. return define; ~~~~~~ -!!! error TS2552: Cannot find name 'define'. Did you mean 'undefined'? +!!! error TS2304: Cannot find name 'define'. } else if (typeof window !== 'undefined') { ~~~~~~ !!! error TS2304: Cannot find name 'window'. diff --git a/tests/baselines/reference/letDeclarations-scopes2.errors.txt b/tests/baselines/reference/letDeclarations-scopes2.errors.txt index e451eb0ad07..5da8d99d397 100644 --- a/tests/baselines/reference/letDeclarations-scopes2.errors.txt +++ b/tests/baselines/reference/letDeclarations-scopes2.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/letDeclarations-scopes2.ts(8,5): error TS2552: Cannot find name 'local2'. Did you mean 'local'? tests/cases/compiler/letDeclarations-scopes2.ts(20,5): error TS2552: Cannot find name 'local2'. Did you mean 'local'? -tests/cases/compiler/letDeclarations-scopes2.ts(23,1): error TS2552: Cannot find name 'local'. Did you mean 'global'? -tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2552: Cannot find name 'local2'. Did you mean 'global'? +tests/cases/compiler/letDeclarations-scopes2.ts(23,1): error TS2304: Cannot find name 'local'. +tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2304: Cannot find name 'local2'. ==== tests/cases/compiler/letDeclarations-scopes2.ts (4 errors) ==== @@ -33,9 +33,9 @@ tests/cases/compiler/letDeclarations-scopes2.ts(25,1): error TS2552: Cannot find local; // Error ~~~~~ -!!! error TS2552: Cannot find name 'local'. Did you mean 'global'? +!!! error TS2304: Cannot find name 'local'. global; // OK local2; // Error ~~~~~~ -!!! error TS2552: Cannot find name 'local2'. Did you mean 'global'? +!!! error TS2304: Cannot find name 'local2'. \ No newline at end of file diff --git a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt index b56b03de533..9b5f0ada58f 100644 --- a/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt +++ b/tests/baselines/reference/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(4,18): error TS2339: Property 'from' does not exist on type 'ArrayConstructor'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(10,13): error TS2304: Cannot find name 'Map'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(17,5): error TS2339: Property 'name' does not exist on type '() => void'. -tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(20,6): error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'sin'? +tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(20,6): error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'asin'? tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(25,6): error TS2304: Cannot find name 'Symbol'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(29,18): error TS2304: Cannot find name 'Symbol'. tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.ts(33,13): error TS2304: Cannot find name 'Proxy'. @@ -40,7 +40,7 @@ tests/cases/compiler/modularizeLibrary_ErrorFromUsingES6FeaturesWithOnlyES5Lib.t // Using ES6 math Math.sign(1); ~~~~ -!!! error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'sin'? +!!! error TS2551: Property 'sign' does not exist on type 'Math'. Did you mean 'asin'? // Using ES6 object var o = { diff --git a/tests/baselines/reference/parser10.1.1-8gs.errors.txt b/tests/baselines/reference/parser10.1.1-8gs.errors.txt index 442b90fc85e..84e45644e94 100644 --- a/tests/baselines/reference/parser10.1.1-8gs.errors.txt +++ b/tests/baselines/reference/parser10.1.1-8gs.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(16,7): error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? +tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(16,7): error TS2304: Cannot find name 'NotEarlyError'. tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(17,5): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. @@ -20,7 +20,7 @@ tests/cases/conformance/parser/ecmascript5/parser10.1.1-8gs.ts(17,5): error TS12 "use strict"; throw NotEarlyError; ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? +!!! error TS2304: Cannot find name 'NotEarlyError'. var public = 1; ~~~~~~ !!! error TS1212: Identifier expected. 'public' is a reserved word in strict mode. diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index 84264ee5512..ee15d465ea0 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(4,1): error TS6053: File 'tests/cases/conformance/parser/ecmascript5/typescript.ts' not found. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(13,22): error TS2304: Cannot find name 'Type'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(14,24): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(14,24): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(17,38): error TS2304: Cannot find name 'CompilerDiagnostics'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(24,39): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(36,36): error TS2304: Cannot find name 'TypeFlow'. @@ -30,7 +30,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(103,22): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(108,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(119,31): error TS2304: Cannot find name 'PrintContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,17): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,37): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(130,37): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(137,17): error TS2304: Cannot find name 'nodeTypeTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(138,24): error TS2304: Cannot find name 'nodeTypeTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(141,30): error TS2304: Cannot find name 'NodeType'. @@ -258,7 +258,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1024,47): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1032,36): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1033,29): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1034,28): error TS2304: Cannot find name 'BasicBlock'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1036,31): error TS2552: Cannot find name 'ControlFlowContext'. Did you mean 'controlFlowPrefix'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1036,31): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1038,69): error TS2304: Cannot find name 'IAstWalker'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1043,26): error TS2304: Cannot find name 'getAstWalkerFactory'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1050,36): error TS2304: Cannot find name 'TypeFlow'. @@ -343,7 +343,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1286,36): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1290,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1290,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1295,32): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1297,27): error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1297,27): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1306,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1314,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1317,30): error TS2304: Cannot find name 'Emitter'. @@ -474,8 +474,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2107,50): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2108,54): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2112,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2119,42): error TS2304: Cannot find name 'ControlFlowContext'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2120,36): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2122,32): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2120,36): error TS2304: Cannot find name 'BasicBlock'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2122,32): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2145,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,48): error TS2304: Cannot find name 'TokenID'. @@ -500,9 +500,9 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2231,48): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2237,48): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2240,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2245,42): error TS2304: Cannot find name 'ControlFlowContext'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2248,36): error TS2552: Cannot find name 'BasicBlock'. Did you mean 'bodBlock'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2248,36): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2259,36): error TS2304: Cannot find name 'TypeFlow'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2263,33): error TS2552: Cannot find name 'ValueLocation'. Did you mean 'LocationInfo'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2263,33): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2264,30): error TS2304: Cannot find name 'VariableSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2269,38): error TS2304: Cannot find name 'TypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2300,19): error TS2304: Cannot find name 'NodeType'. @@ -537,7 +537,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'Type'. public flags = ASTFlags.Writeable; ~~~~~~~~ -!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +!!! error TS2304: Cannot find name 'ASTFlags'. // REVIEW: for diagnostic purposes public passCreated: number = CompilerDiagnostics.analysisPass; @@ -713,7 +713,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~ -!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +!!! error TS2304: Cannot find name 'ASTFlags'. lab += " (Error)"; } context.writeLine(lab); @@ -2075,7 +2075,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error var context = new ControlFlowContext(entry, exit); ~~~~~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ControlFlowContext'. Did you mean 'controlFlowPrefix'? +!!! error TS2304: Cannot find name 'ControlFlowContext'. var controlFlowPrefix = (ast: AST, parent: AST, walker: IAstWalker) => { ~~~~~~~~~~ @@ -2506,7 +2506,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error super(nodeType); this.flags |= ASTFlags.IsStatement; ~~~~~~~~ -!!! error TS2552: Cannot find name 'ASTFlags'. Did you mean 'ASTList'? +!!! error TS2304: Cannot find name 'ASTFlags'. } public isLoop() { return false; } @@ -3591,11 +3591,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'ControlFlowContext'. var afterFinally = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? +!!! error TS2304: Cannot find name 'BasicBlock'. context.walk(this.tryNode, this); var finBlock = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'finBlock'? +!!! error TS2304: Cannot find name 'BasicBlock'. if (context.current) { context.current.addSuccessor(finBlock); } @@ -3771,7 +3771,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error context.addContent(this.param); var bodBlock = new BasicBlock(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'BasicBlock'. Did you mean 'bodBlock'? +!!! error TS2304: Cannot find name 'BasicBlock'. context.current.addSuccessor(bodBlock); context.current = bodBlock; } @@ -3790,7 +3790,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error this.param = typeFlow.typeCheck(this.param); var exceptVar = new ValueLocation(); ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ValueLocation'. Did you mean 'LocationInfo'? +!!! error TS2304: Cannot find name 'ValueLocation'. var varSym = new VariableSymbol((this.param).id.text, ~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'VariableSymbol'. diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index cbe09f8e708..67f3f5e9a28 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -53,11 +53,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(186,75): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(189,25): error TS2304: Cannot find name 'ModuleDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(189,46): error TS2304: Cannot find name 'ModuleDeclaration'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,25): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,54): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(191,54): error TS2304: Cannot find name 'ModuleFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,22): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,51): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(192,51): error TS2304: Cannot find name 'ModuleFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,26): error TS2304: Cannot find name 'hasFlag'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,55): error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(194,55): error TS2304: Cannot find name 'ModuleFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(195,25): error TS2304: Cannot find name 'Identifier'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(197,25): error TS2304: Cannot find name 'isQuoted'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(200,25): error TS2304: Cannot find name 'TypeSymbol'. @@ -606,18 +606,18 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +!!! error TS2304: Cannot find name 'ModuleFlags'. var isEnum = hasFlag(moduleDecl.modFlags, ModuleFlags.IsEnum); ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +!!! error TS2304: Cannot find name 'ModuleFlags'. var isGlobal = context.scopeChain.container == context.checker.gloMod; var isExported = hasFlag(moduleDecl.modFlags, ModuleFlags.Exported); ~~~~~~~ !!! error TS2304: Cannot find name 'hasFlag'. ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ModuleFlags'. Did you mean 'moduleDecl'? +!!! error TS2304: Cannot find name 'ModuleFlags'. var modName = (moduleDecl.name).text; ~~~~~~~~~~ !!! error TS2304: Cannot find name 'Identifier'. diff --git a/tests/baselines/reference/parserRealSource8.errors.txt b/tests/baselines/reference/parserRealSource8.errors.txt index d4d26e5489f..4fbf039ae0a 100644 --- a/tests/baselines/reference/parserRealSource8.errors.txt +++ b/tests/baselines/reference/parserRealSource8.errors.txt @@ -74,19 +74,19 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(284,38): error T tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(286,55): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(292,43): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(309,29): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,31): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,31): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,49): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(310,84): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(311,36): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,38): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,38): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,56): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(312,98): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(313,35): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,37): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,37): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,55): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(314,96): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(315,42): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,44): error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,44): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,62): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(316,110): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(321,26): error TS2304: Cannot find name 'SymbolScopeBuilder'. @@ -598,7 +598,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var funcMembers = new ScopedMembers(new DualStringHashTable(funcTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +!!! error TS2304: Cannot find name 'ScopedMembers'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -608,7 +608,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var ambientFuncMembers = new ScopedMembers(new DualStringHashTable(ambientFuncTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +!!! error TS2304: Cannot find name 'ScopedMembers'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -618,7 +618,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var funcStaticMembers = new ScopedMembers(new DualStringHashTable(funcStaticTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +!!! error TS2304: Cannot find name 'ScopedMembers'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ @@ -628,7 +628,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource8.ts(454,35): error T !!! error TS2304: Cannot find name 'StringHashTable'. var ambientFuncStaticMembers = new ScopedMembers(new DualStringHashTable(ambientFuncStaticTable, new StringHashTable())); ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ScopedMembers'. Did you mean 'funcMembers'? +!!! error TS2304: Cannot find name 'ScopedMembers'. ~~~~~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DualStringHashTable'. ~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt index dde7576bfc4..2b663a8cd4f 100644 --- a/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt +++ b/tests/baselines/reference/parserUnterminatedGeneric2.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,16): error TS2304: Cannot find name 'context'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,23): error TS1005: ',' expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,25): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,30): error TS2552: Cannot find name 'value'. Did you mean 'eval'? +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,30): error TS2304: Cannot find name 'value'. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,35): error TS1005: ',' expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,37): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGeneric2.ts(4,41): error TS1005: ';' expected. @@ -35,7 +35,7 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserUnterminatedGener ~~~ !!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? ~~~~~ -!!! error TS2552: Cannot find name 'value'. Did you mean 'eval'? +!!! error TS2304: Cannot find name 'value'. ~ !!! error TS1005: ',' expected. ~~~ diff --git a/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt b/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt index db5bd15b155..8d9acd6fb57 100644 --- a/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt +++ b/tests/baselines/reference/parser_breakInIterationOrSwitchStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? +tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts(1,15): error TS2304: Cannot find name 'something'. ==== tests/cases/conformance/parser/ecmascript5/Statements/BreakStatements/parser_breakInIterationOrSwitchStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? +!!! error TS2304: Cannot find name 'something'. break; } \ No newline at end of file diff --git a/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt b/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt index 4036de0d2a2..5d87d3e3c71 100644 --- a/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt +++ b/tests/baselines/reference/parser_continueInIterationStatement4.errors.txt @@ -1,9 +1,9 @@ -tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts(1,15): error TS2552: Cannot find name 'something'. Did you mean 'String'? +tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts(1,15): error TS2304: Cannot find name 'something'. ==== tests/cases/conformance/parser/ecmascript5/Statements/ContinueStatements/parser_continueInIterationStatement4.ts (1 errors) ==== for (var i in something) { ~~~~~~~~~ -!!! error TS2552: Cannot find name 'something'. Did you mean 'String'? +!!! error TS2304: Cannot find name 'something'. continue; } \ No newline at end of file diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt index fc8d1c5a322..b9ac11d3b6c 100644 --- a/tests/baselines/reference/parserharness.errors.txt +++ b/tests/baselines/reference/parserharness.errors.txt @@ -25,11 +25,11 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(776,42): e tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(781,23): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(794,49): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(795,49): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,53): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,89): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,53): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,89): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,115): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,145): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,145): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(999,40): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1041,43): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1044,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? @@ -1153,16 +1153,16 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var script = compiler.scripts.members[m]; var enclosingScopeContext = TypeScript.findEnclosingScopeAt(new TypeScript.NullLogger(), script, new TypeScript.StringSourceText(code), 0, false); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? var entries = new TypeScript.ScopeTraversal(compiler).getScopeEntries(enclosingScopeContext); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'script2'? +!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? for (var i = 0; i < entries.length; i++) { if (entries[i].name === targetIdentifier) { diff --git a/tests/baselines/reference/parserindenter.errors.txt b/tests/baselines/reference/parserindenter.errors.txt index 997b56b7db9..5e97bfdabc1 100644 --- a/tests/baselines/reference/parserindenter.errors.txt +++ b/tests/baselines/reference/parserindenter.errors.txt @@ -57,7 +57,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(265,91): tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(266,34): error TS2304: Cannot find name 'IndentationInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(274,53): error TS2304: Cannot find name 'AuthorParseNodeKind'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(278,50): error TS2304: Cannot find name 'Span'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(279,28): error TS2552: Cannot find name 'ParseTree'. Did you mean 'parseInt'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(279,28): error TS2304: Cannot find name 'ParseTree'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,60): error TS2304: Cannot find name 'TokenSpan'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,77): error TS2304: Cannot find name 'ParseNode'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(288,89): error TS2304: Cannot find name 'IndentationInfo'. @@ -112,8 +112,8 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(634,21): tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(665,34): error TS2304: Cannot find name 'IndentationEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(686,45): error TS2304: Cannot find name 'TextEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(688,34): error TS2304: Cannot find name 'IndentationEditInfo'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(695,35): error TS2304: Cannot find name 'IndentationEditInfo'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(698,39): error TS2304: Cannot find name 'IndentationEditInfo'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(695,35): error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(698,39): error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(706,42): error TS2304: Cannot find name 'TextEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(709,50): error TS2304: Cannot find name 'TokenSpan'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(709,67): error TS2304: Cannot find name 'ParseNode'. @@ -527,7 +527,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(736,38): !!! error TS2304: Cannot find name 'Span'. node = ParseTree.FindCommonParentNode(semiColonStartSpan, semiColonStartSpan, node); ~~~~~~~~~ -!!! error TS2552: Cannot find name 'ParseTree'. Did you mean 'parseInt'? +!!! error TS2304: Cannot find name 'ParseTree'. indentationInfo = node.GetEffectiveChildrenIndentation(this); return indentationInfo; } @@ -1053,12 +1053,12 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(736,38): indentationInfo = IndentationEditInfo.create2(indent.Position, indent.ReplaceWith, lineStartPosition, lineIndentLength); ~~~~~~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'IndentationEditInfo'. +!!! error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? } else { indentationInfo = new IndentationEditInfo(indent); ~~~~~~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'IndentationEditInfo'. +!!! error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? } this.indentationBag.AddIndent(indentationInfo); diff --git a/tests/baselines/reference/scanner10.1.1-8gs.errors.txt b/tests/baselines/reference/scanner10.1.1-8gs.errors.txt index f8b0c121ee0..6e75f195c26 100644 --- a/tests/baselines/reference/scanner10.1.1-8gs.errors.txt +++ b/tests/baselines/reference/scanner10.1.1-8gs.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(16,7): error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? +tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(16,7): error TS2304: Cannot find name 'NotEarlyError'. tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,1): error TS7027: Unreachable code detected. tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,5): error TS1212: Identifier expected. 'public' is a reserved word in strict mode. @@ -21,7 +21,7 @@ tests/cases/conformance/scanner/ecmascript5/scanner10.1.1-8gs.ts(17,5): error TS "use strict"; throw NotEarlyError; ~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'NotEarlyError'. Did you mean 'SyntaxError'? +!!! error TS2304: Cannot find name 'NotEarlyError'. var public = 1; ~~~ !!! error TS7027: Unreachable code detected. diff --git a/tests/baselines/reference/scannertest1.errors.txt b/tests/baselines/reference/scannertest1.errors.txt index 6a98346e001..fce2a0b292a 100644 --- a/tests/baselines/reference/scannertest1.errors.txt +++ b/tests/baselines/reference/scannertest1.errors.txt @@ -1,19 +1,19 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(1,1): error TS6053: File 'tests/cases/conformance/scanner/ecmascript5/References.ts' not found. -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,21): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,21): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(5,47): error TS2304: Cannot find name 'CharacterCodes'. tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(9,16): error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,22): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,22): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,47): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,22): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(10,47): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,22): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(11,47): error TS2304: Cannot find name 'CharacterCodes'. tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(15,9): error TS2304: Cannot find name 'Debug'. tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(15,22): error TS2662: Cannot find name 'isHexDigit'. Did you mean the static member 'CharacterInfo.isHexDigit'? tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(16,16): error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(17,20): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,21): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,46): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(19,23): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? -tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(17,20): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,21): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(18,46): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(19,23): error TS2304: Cannot find name 'CharacterCodes'. +tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2304: Cannot find name 'CharacterCodes'. ==== tests/cases/conformance/scanner/ecmascript5/scannertest1.ts (16 errors) ==== @@ -25,9 +25,9 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2552 public static isDecimalDigit(c: number): boolean { return c >= CharacterCodes._0 && c <= CharacterCodes._9; ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. } public static isHexDigit(c: number): boolean { @@ -36,14 +36,14 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2552 !!! error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? (c >= CharacterCodes.A && c <= CharacterCodes.F) || ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. (c >= CharacterCodes.a && c <= CharacterCodes.f); ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. } public static hexValue(c: number): number { @@ -57,18 +57,18 @@ tests/cases/conformance/scanner/ecmascript5/scannertest1.ts(20,23): error TS2552 !!! error TS2662: Cannot find name 'isDecimalDigit'. Did you mean the static member 'CharacterInfo.isDecimalDigit'? ? (c - CharacterCodes._0) ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. : (c >= CharacterCodes.A && c <= CharacterCodes.F) ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. ? c - CharacterCodes.A + 10 ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. : c - CharacterCodes.a + 10; ~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'CharacterCodes'. Did you mean 'CharacterInfo'? +!!! error TS2304: Cannot find name 'CharacterCodes'. } } diff --git a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt index 1c57ec5cf68..b9d884939bd 100644 --- a/tests/baselines/reference/typeGuardFunctionErrors.errors.txt +++ b/tests/baselines/reference/typeGuardFunctionErrors.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(1,7): tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(14,5): error TS2322: Type '""' is not assignable to type 'boolean'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,55): error TS2304: Cannot find name 'x'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS1144: '{' or ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS2552: Cannot find name 'is'. Did you mean 'isB'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,57): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,60): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(17,62): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(21,33): error TS2304: Cannot find name 'x'. @@ -34,16 +34,16 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(84,1): tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(90,1): error TS2322: Type '(p1: any, p2: any, p3: any) => p1 is A' is not assignable to type '(p1: any, p2: any) => p1 is A'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,9): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS1005: '=' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS2552: Cannot find name 'is'. Did you mean 'isB'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,11): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,14): error TS1005: ',' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(95,14): error TS2300: Duplicate identifier 'A'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,16): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS1005: '=' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS2552: Cannot find name 'is'. Did you mean 'isB'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,18): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(96,21): error TS1005: ',' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,20): error TS2304: Cannot find name 'b'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS1144: '{' or ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS2552: Cannot find name 'is'. Did you mean 'isB'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,22): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,25): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(97,27): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(103,25): error TS1228: A type predicate is only allowed in return type position for functions and methods. @@ -55,7 +55,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(110,9) tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(115,18): error TS1228: A type predicate is only allowed in return type position for functions and methods. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,22): error TS2304: Cannot find name 'p1'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS1005: ';' expected. -tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS2552: Cannot find name 'is'. Did you mean 'isB'? +tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,25): error TS2304: Cannot find name 'is'. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(119,28): error TS1005: ';' expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(120,1): error TS1128: Declaration or statement expected. tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(123,20): error TS1229: A type predicate cannot reference a rest parameter. @@ -91,7 +91,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1144: '{' or ';' expected. ~~ -!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? +!!! error TS2304: Cannot find name 'is'. ~ !!! error TS1005: ';' expected. ~ @@ -223,7 +223,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: '=' expected. ~~ -!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? +!!! error TS2304: Cannot find name 'is'. ~ !!! error TS1005: ',' expected. ~ @@ -234,7 +234,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: '=' expected. ~~ -!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? +!!! error TS2304: Cannot find name 'is'. ~ !!! error TS1005: ',' expected. function b3(): A | b is A { @@ -243,7 +243,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1144: '{' or ';' expected. ~~ -!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? +!!! error TS2304: Cannot find name 'is'. ~ !!! error TS1005: ';' expected. ~ @@ -289,7 +289,7 @@ tests/cases/conformance/expressions/typeGuards/typeGuardFunctionErrors.ts(136,39 ~~ !!! error TS1005: ';' expected. ~~ -!!! error TS2552: Cannot find name 'is'. Did you mean 'isB'? +!!! error TS2304: Cannot find name 'is'. ~ !!! error TS1005: ';' expected. } diff --git a/tests/baselines/reference/undeclaredMethod.errors.txt b/tests/baselines/reference/undeclaredMethod.errors.txt index 4e7bf187440..942d1908182 100644 --- a/tests/baselines/reference/undeclaredMethod.errors.txt +++ b/tests/baselines/reference/undeclaredMethod.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2551: Property 'saltbar' does not exist on type 'C'. Did you mean 'salt'? +tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2339: Property 'saltbar' does not exist on type 'C'. ==== tests/cases/compiler/undeclaredMethod.ts (1 errors) ==== @@ -13,6 +13,6 @@ tests/cases/compiler/undeclaredMethod.ts(10,3): error TS2551: Property 'saltbar' c.salt(); // cool c.saltbar(); // crash ~~~~~~~ -!!! error TS2551: Property 'saltbar' does not exist on type 'C'. Did you mean 'salt'? +!!! error TS2339: Property 'saltbar' does not exist on type 'C'. \ No newline at end of file From c61a371e6239a96d8eb0d469b8ad157c9a341e93 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 3 May 2017 10:06:55 -0700 Subject: [PATCH 25/92] Make TokenRange an interface and remove `ITokenAccess` delegation --- src/services/formatting/tokenRange.ts | 139 ++++++++++---------------- 1 file changed, 54 insertions(+), 85 deletions(-) diff --git a/src/services/formatting/tokenRange.ts b/src/services/formatting/tokenRange.ts index 28f22cec475..29855279e25 100644 --- a/src/services/formatting/tokenRange.ts +++ b/src/services/formatting/tokenRange.ts @@ -3,23 +3,13 @@ /* @internal */ namespace ts.formatting { export namespace Shared { - export interface ITokenAccess { - GetTokens(): SyntaxKind[]; - Contains(token: SyntaxKind): boolean; - isSpecific(): boolean; + const allTokens: SyntaxKind[] = []; + for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) { + allTokens.push(token); } - export class TokenRangeAccess implements ITokenAccess { - private tokens: SyntaxKind[]; - - constructor(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[]) { - this.tokens = []; - for (let token = from; token <= to; token++) { - if (ts.indexOf(except, token) < 0) { - this.tokens.push(token); - } - } - } + class TokenValuesAccess implements TokenRange { + constructor(private readonly tokens: SyntaxKind[] = []) { } public GetTokens(): SyntaxKind[] { return this.tokens; @@ -32,27 +22,8 @@ namespace ts.formatting { public isSpecific() { return true; } } - export class TokenValuesAccess implements ITokenAccess { - private tokens: SyntaxKind[]; - - constructor(tks: SyntaxKind[]) { - this.tokens = tks && tks.length ? tks : []; - } - - public GetTokens(): SyntaxKind[] { - return this.tokens; - } - - public Contains(token: SyntaxKind): boolean { - return this.tokens.indexOf(token) >= 0; - } - - public isSpecific() { return true; } - } - - export class TokenSingleValueAccess implements ITokenAccess { - constructor(public token: SyntaxKind) { - } + class TokenSingleValueAccess implements TokenRange { + constructor(private readonly token: SyntaxKind) {} public GetTokens(): SyntaxKind[] { return [this.token]; @@ -65,12 +36,7 @@ namespace ts.formatting { public isSpecific() { return true; } } - const allTokens: SyntaxKind[] = []; - for (let token = SyntaxKind.FirstToken; token <= SyntaxKind.LastToken; token++) { - allTokens.push(token); - } - - export class TokenAllAccess implements ITokenAccess { + class TokenAllAccess implements TokenRange { public GetTokens(): SyntaxKind[] { return allTokens; } @@ -86,8 +52,8 @@ namespace ts.formatting { public isSpecific() { return false; } } - export class TokenAllExceptAccess implements ITokenAccess { - constructor(readonly except: SyntaxKind) {} + class TokenAllExceptAccess implements TokenRange { + constructor(private readonly except: SyntaxKind) {} public GetTokens(): SyntaxKind[] { return allTokens.filter(t => t !== this.except); @@ -100,55 +66,58 @@ namespace ts.formatting { public isSpecific() { return false; } } - export class TokenRange { - constructor(public tokenAccess: ITokenAccess) { + export interface TokenRange { + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + isSpecific(): boolean; + } + + export namespace TokenRange { + export function FromToken(token: SyntaxKind): TokenRange { + return new TokenSingleValueAccess(token); } - static FromToken(token: SyntaxKind): TokenRange { - return new TokenRange(new TokenSingleValueAccess(token)); + export function FromTokens(tokens: SyntaxKind[]): TokenRange { + return new TokenValuesAccess(tokens); } - static FromTokens(tokens: SyntaxKind[]): TokenRange { - return new TokenRange(new TokenValuesAccess(tokens)); + export function FromRange(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[] = []): TokenRange { + const tokens: SyntaxKind[] = []; + for (let token = from; token <= to; token++) { + if (ts.indexOf(except, token) < 0) { + tokens.push(token); + } + } + return new TokenValuesAccess(tokens); } - static FromRange(f: SyntaxKind, to: SyntaxKind, except: SyntaxKind[] = []): TokenRange { - return new TokenRange(new TokenRangeAccess(f, to, except)); + export function AnyExcept(token: SyntaxKind): TokenRange { + return new TokenAllExceptAccess(token); } - static AnyExcept(token: SyntaxKind): TokenRange { - return new TokenRange(new TokenAllExceptAccess(token)); - } - - public GetTokens(): SyntaxKind[] { - return this.tokenAccess.GetTokens(); - } - - public Contains(token: SyntaxKind): boolean { - return this.tokenAccess.Contains(token); - } - - public toString(): string { - return this.tokenAccess.toString(); - } - - public isSpecific() { - return this.tokenAccess.isSpecific(); - } - - static Any: TokenRange = new TokenRange(new TokenAllAccess()); - static AnyIncludingMultilineComments = TokenRange.FromTokens([...allTokens, SyntaxKind.MultiLineCommentTrivia]); - static Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword); - static BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator); - static BinaryKeywordOperators = TokenRange.FromTokens([SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword, SyntaxKind.OfKeyword, SyntaxKind.AsKeyword, SyntaxKind.IsKeyword]); - static UnaryPrefixOperators = TokenRange.FromTokens([SyntaxKind.PlusPlusToken, SyntaxKind.MinusMinusToken, SyntaxKind.TildeToken, SyntaxKind.ExclamationToken]); - static UnaryPrefixExpressions = TokenRange.FromTokens([SyntaxKind.NumericLiteral, SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.OpenBraceToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); - static UnaryPreincrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); - static UnaryPostincrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]); - static UnaryPredecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); - static UnaryPostdecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]); - static Comments = TokenRange.FromTokens([SyntaxKind.SingleLineCommentTrivia, SyntaxKind.MultiLineCommentTrivia]); - static TypeNames = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword, SyntaxKind.SymbolKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]); + export const Any: TokenRange = new TokenAllAccess(); + export const AnyIncludingMultilineComments = TokenRange.FromTokens([...allTokens, SyntaxKind.MultiLineCommentTrivia]); + export const Keywords = TokenRange.FromRange(SyntaxKind.FirstKeyword, SyntaxKind.LastKeyword); + export const BinaryOperators = TokenRange.FromRange(SyntaxKind.FirstBinaryOperator, SyntaxKind.LastBinaryOperator); + export const BinaryKeywordOperators = TokenRange.FromTokens([ + SyntaxKind.InKeyword, SyntaxKind.InstanceOfKeyword, SyntaxKind.OfKeyword, SyntaxKind.AsKeyword, SyntaxKind.IsKeyword]); + export const UnaryPrefixOperators = TokenRange.FromTokens([ + SyntaxKind.PlusPlusToken, SyntaxKind.MinusMinusToken, SyntaxKind.TildeToken, SyntaxKind.ExclamationToken]); + export const UnaryPrefixExpressions = TokenRange.FromTokens([ + SyntaxKind.NumericLiteral, SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, + SyntaxKind.OpenBraceToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); + export const UnaryPreincrementExpressions = TokenRange.FromTokens([ + SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); + export const UnaryPostincrementExpressions = TokenRange.FromTokens([ + SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]); + export const UnaryPredecrementExpressions = TokenRange.FromTokens([ + SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); + export const UnaryPostdecrementExpressions = TokenRange.FromTokens([ + SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]); + export const Comments = TokenRange.FromTokens([SyntaxKind.SingleLineCommentTrivia, SyntaxKind.MultiLineCommentTrivia]); + export const TypeNames = TokenRange.FromTokens([ + SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword, + SyntaxKind.SymbolKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]); } } } From 48773435382b47aecb8947fb37e440d0e69a061d Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Wed, 3 May 2017 10:10:13 -0700 Subject: [PATCH 26/92] Reduce max number of spelling suggestions to 10 --- src/compiler/checker.ts | 2 +- .../maximum100SpellingSuggestions.errors.txt | 378 ------------------ .../maximum100SpellingSuggestions.js | 140 ------- .../maximum10SpellingSuggestions.errors.txt | 45 +++ .../reference/maximum10SpellingSuggestions.js | 24 ++ .../reference/parserRealSource11.errors.txt | 156 ++++---- .../reference/parserRealSource7.errors.txt | 8 +- .../reference/parserS7.6_A4.2_T1.errors.txt | 92 ++--- .../reference/parserharness.errors.txt | 140 +++---- .../reference/parserindenter.errors.txt | 8 +- .../reference/scannerS7.6_A4.2_T1.errors.txt | 92 ++--- .../compiler/maximum100SpellingSuggestions.ts | 14 - .../compiler/maximum10SpellingSuggestions.ts | 5 + 13 files changed, 323 insertions(+), 781 deletions(-) delete mode 100644 tests/baselines/reference/maximum100SpellingSuggestions.errors.txt delete mode 100644 tests/baselines/reference/maximum100SpellingSuggestions.js create mode 100644 tests/baselines/reference/maximum10SpellingSuggestions.errors.txt create mode 100644 tests/baselines/reference/maximum10SpellingSuggestions.js delete mode 100644 tests/cases/compiler/maximum100SpellingSuggestions.ts create mode 100644 tests/cases/compiler/maximum10SpellingSuggestions.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ca9ac8e09ea..ebf33f166cd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -319,7 +319,7 @@ namespace ts { const resolutionPropertyNames: TypeSystemPropertyName[] = []; let suggestionCount = 0; - const maximumSuggestionCount = 100; + const maximumSuggestionCount = 10; const mergedSymbols: Symbol[] = []; const symbolLinks: SymbolLinks[] = []; const nodeLinks: NodeLinks[] = []; diff --git a/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt b/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt deleted file mode 100644 index 4f921104d77..00000000000 --- a/tests/baselines/reference/maximum100SpellingSuggestions.errors.txt +++ /dev/null @@ -1,378 +0,0 @@ -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(3,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(4,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(5,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(6,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(7,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(8,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(9,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(10,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(11,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,1): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,6): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,11): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,16): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,21): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,26): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,31): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,36): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,41): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(12,46): error TS2552: Cannot find name 'any'. Did you mean 'NaN'? -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,1): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,6): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,11): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,16): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,21): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,26): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,31): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,36): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,41): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(13,46): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,1): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,6): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,11): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,16): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,21): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,26): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,31): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,36): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,41): error TS2304: Cannot find name 'any'. -tests/cases/compiler/maximum100SpellingSuggestions.ts(14,46): error TS2304: Cannot find name 'any'. - - -==== tests/cases/compiler/maximum100SpellingSuggestions.ts (120 errors) ==== - // 10 anys per line, 12 lines - // the last two lines should not have spelling suggestions - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - ~~~ -!!! error TS2552: Cannot find name 'any'. Did you mean 'NaN'? - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - any; any; any; any; any; any; any; any; any; any; - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - ~~~ -!!! error TS2304: Cannot find name 'any'. - \ No newline at end of file diff --git a/tests/baselines/reference/maximum100SpellingSuggestions.js b/tests/baselines/reference/maximum100SpellingSuggestions.js deleted file mode 100644 index 5746091feb1..00000000000 --- a/tests/baselines/reference/maximum100SpellingSuggestions.js +++ /dev/null @@ -1,140 +0,0 @@ -//// [maximum100SpellingSuggestions.ts] -// 10 anys per line, 12 lines -// the last two lines should not have spelling suggestions -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; - - -//// [maximum100SpellingSuggestions.js] -// 10 anys per line, 12 lines -// the last two lines should not have spelling suggestions -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; -any; diff --git a/tests/baselines/reference/maximum10SpellingSuggestions.errors.txt b/tests/baselines/reference/maximum10SpellingSuggestions.errors.txt new file mode 100644 index 00000000000..8069d7bd1f5 --- /dev/null +++ b/tests/baselines/reference/maximum10SpellingSuggestions.errors.txt @@ -0,0 +1,45 @@ +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,1): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,6): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,11): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,16): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,21): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,26): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,31): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,36): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,41): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(4,46): error TS2552: Cannot find name 'bob'. Did you mean 'blob'? +tests/cases/compiler/maximum10SpellingSuggestions.ts(5,1): error TS2304: Cannot find name 'bob'. +tests/cases/compiler/maximum10SpellingSuggestions.ts(5,6): error TS2304: Cannot find name 'bob'. + + +==== tests/cases/compiler/maximum10SpellingSuggestions.ts (12 errors) ==== + // 10 bobs on the first line + // the last two bobs should not have did-you-mean spelling suggestions + var blob; + bob; bob; bob; bob; bob; bob; bob; bob; bob; bob; + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + ~~~ +!!! error TS2552: Cannot find name 'bob'. Did you mean 'blob'? + bob; bob; + ~~~ +!!! error TS2304: Cannot find name 'bob'. + ~~~ +!!! error TS2304: Cannot find name 'bob'. + \ No newline at end of file diff --git a/tests/baselines/reference/maximum10SpellingSuggestions.js b/tests/baselines/reference/maximum10SpellingSuggestions.js new file mode 100644 index 00000000000..eedd55b0840 --- /dev/null +++ b/tests/baselines/reference/maximum10SpellingSuggestions.js @@ -0,0 +1,24 @@ +//// [maximum10SpellingSuggestions.ts] +// 10 bobs on the first line +// the last two bobs should not have did-you-mean spelling suggestions +var blob; +bob; bob; bob; bob; bob; bob; bob; bob; bob; bob; +bob; bob; + + +//// [maximum10SpellingSuggestions.js] +// 10 bobs on the first line +// the last two bobs should not have did-you-mean spelling suggestions +var blob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; +bob; diff --git a/tests/baselines/reference/parserRealSource11.errors.txt b/tests/baselines/reference/parserRealSource11.errors.txt index ee15d465ea0..ba52fa5b62d 100644 --- a/tests/baselines/reference/parserRealSource11.errors.txt +++ b/tests/baselines/reference/parserRealSource11.errors.txt @@ -107,13 +107,13 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(487,58): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(489,22): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(491,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(494,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(496,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(496,58): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(498,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(500,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(500,58): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(502,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(504,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(504,58): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(506,22): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(507,58): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(507,58): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(518,32): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(520,29): error TS1210: Invalid use of 'arguments'. Class definitions are automatically in strict mode. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(525,27): error TS2304: Cannot find name 'Signature'. @@ -174,26 +174,26 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(644,21): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(647,26): error TS2304: Cannot find name 'tokenTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(651,58): error TS2304: Cannot find name 'tokenTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(658,26): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(660,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(660,67): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(665,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(669,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(670,55): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(672,33): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(672,60): error TS2304: Cannot find name 'FncFlags'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(678,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(681,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(684,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(678,67): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(681,67): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(684,63): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(686,26): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(687,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(694,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(687,63): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(694,63): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(696,26): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(711,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(714,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(718,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(718,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(721,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(723,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(725,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(721,51): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(723,51): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(725,51): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(733,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(738,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(747,30): error TS2304: Cannot find name 'Emitter'. @@ -213,7 +213,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(837,30): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(837,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(838,24): error TS2304: Cannot find name 'ModuleType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(841,61): error TS2304: Cannot find name 'TypeSymbol'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(850,52): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(850,52): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(863,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(867,29): error TS1015: Parameter cannot have question mark and initializer. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(868,38): error TS2304: Cannot find name 'NodeType'. @@ -311,7 +311,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1164,47): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1164,97): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1172,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1172,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1176,60): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1176,60): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1187,32): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1195,27): error TS2304: Cannot find name 'ModuleFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1196,21): error TS2304: Cannot find name 'ModuleType'. @@ -354,7 +354,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1339,26): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1348,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1351,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1351,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1362,67): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1362,67): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1374,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1375,37): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1388,36): error TS2304: Cannot find name 'TypeFlow'. @@ -370,7 +370,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1438,34): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1457,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1462,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1462,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1467,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1467,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1475,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1479,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1481,33): error TS2304: Cannot find name 'BasicBlock'. @@ -380,7 +380,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1490,39): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1515,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1518,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1518,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1528,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1528,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1535,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1539,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1541,33): error TS2304: Cannot find name 'BasicBlock'. @@ -389,7 +389,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1545,29): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1572,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1577,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1577,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1583,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1583,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1596,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1600,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1602,31): error TS2304: Cannot find name 'BasicBlock'. @@ -398,7 +398,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1615,39): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1651,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1654,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1654,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1660,63): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1660,63): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1670,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1675,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1682,19): error TS2304: Cannot find name 'NodeType'. @@ -416,8 +416,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1732,66): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1733,73): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1749,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1749,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1755,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1757,46): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1755,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1757,46): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1766,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1775,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1784,33): error TS2304: Cannot find name 'BasicBlock'. @@ -426,10 +426,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1811,19): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1816,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1816,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1822,43): error TS2304: Cannot find name 'NodeType'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1823,55): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1827,65): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1831,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1833,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1823,55): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1827,65): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1831,47): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1833,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1841,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1845,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1850,33): error TS2304: Cannot find name 'BasicBlock'. @@ -443,13 +443,13 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1908,25): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1911,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1914,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1914,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1919,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1919,51): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1928,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1939,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1944,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1944,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1950,46): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1958,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1950,46): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1958,50): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1969,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1981,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1984,33): error TS2304: Cannot find name 'BasicBlock'. @@ -457,7 +457,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(1985,35): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2014,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2017,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2017,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2022,51): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2022,51): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2033,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2042,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2043,33): error TS2304: Cannot find name 'BasicBlock'. @@ -466,12 +466,12 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2067,19): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2070,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2070,48): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2074,36): error TS2304: Cannot find name 'TypeFlow'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2077,28): error TS2552: Cannot find name 'getTypeLink'. Did you mean 'typeLink'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2077,28): error TS2304: Cannot find name 'getTypeLink'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2100,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2105,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2105,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2107,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2108,54): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2107,50): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2108,54): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2112,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2119,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2120,36): error TS2304: Cannot find name 'BasicBlock'. @@ -479,8 +479,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2122,32): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2145,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2150,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2153,50): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2154,52): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2153,50): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2154,52): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2159,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2161,32): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2164,37): error TS2304: Cannot find name 'BasicBlock'. @@ -489,7 +489,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2185,36): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2195,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2198,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2198,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2202,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2202,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2207,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2212,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2223,19): error TS2304: Cannot find name 'NodeType'. @@ -497,8 +497,8 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2225,40): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2229,32): error TS2304: Cannot find name 'SymbolScope'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2231,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2231,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2237,48): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2240,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2237,48): error TS2304: Cannot find name 'TokenID'. +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2240,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2245,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2248,36): error TS2304: Cannot find name 'BasicBlock'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2259,36): error TS2304: Cannot find name 'TypeFlow'. @@ -508,7 +508,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2269,38): error tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2300,19): error TS2304: Cannot find name 'NodeType'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2303,30): error TS2304: Cannot find name 'Emitter'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2303,48): error TS2304: Cannot find name 'TokenID'. -tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2307,47): error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2307,47): error TS2304: Cannot find name 'TokenID'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2312,42): error TS2304: Cannot find name 'ControlFlowContext'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2320,36): error TS2304: Cannot find name 'TypeFlow'. tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2331,19): error TS2304: Cannot find name 'NodeType'. @@ -1233,7 +1233,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("typeof "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; case NodeType.Delete: ~~~~~~~~ @@ -1241,7 +1241,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("delete "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; case NodeType.Void: ~~~~~~~~ @@ -1249,14 +1249,14 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("void "); emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; case NodeType.TypeAssertion: ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; default: throw new Error("please implement in derived class"); @@ -1531,7 +1531,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (!emitter.tryEmitConstant(this)) { emitter.emitJavascript(this.operand1, TokenID.Dot, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput("."); emitter.emitJavascriptName(this.operand2, false); } @@ -1561,24 +1561,24 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand1, TokenID.Colon, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } else { emitter.emitJavascript(this.operand1, TokenID.Colon, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutputTrimmable(": "); } emitter.emitJavascript(this.operand2, TokenID.Comma, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; case NodeType.Comma: ~~~~~~~~ !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.operand1, TokenID.Comma, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. if (emitter.emitState.inObjectLiteral) { emitter.writeLineToOutput(", "); } @@ -1587,7 +1587,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error } emitter.emitJavascript(this.operand2, TokenID.Comma, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. break; case NodeType.Is: ~~~~~~~~ @@ -1626,15 +1626,15 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.operand1, TokenID.Question, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(" ? "); emitter.emitJavascript(this.operand2, TokenID.Question, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(" : "); emitter.emitJavascript(this.operand3, TokenID.Question, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -1799,7 +1799,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.firstModAlias = this.firstAliasedModToString(); emitter.emitJavascript(this.alias, TokenID.Tilde, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. // the dynamic import case will insert the semi-colon automatically if (!this.isDynamicImport) { emitter.writeToOutput(";"); @@ -2321,7 +2321,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascriptList(this.bod, null, TokenID.Semicolon, true, false, false, true, this.requiresInherits); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -2593,7 +2593,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (this.statements) { emitter.emitJavascriptList(this.statements, null, TokenID.Semicolon, true, false, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } if (this.isStatementBlock) { emitter.indenter.decreaseIndent(); @@ -2730,7 +2730,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("while("); emitter.emitJavascript(this.cond, TokenID.While, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.emitJavascriptStatements(this.body, false, false); emitter.setInObjectLiteral(temp); @@ -2811,7 +2811,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput('('); emitter.emitJavascript(this.cond, TokenID.CloseParen, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.setInObjectLiteral(temp); emitter.recordSourceMappingEnd(this); @@ -2884,7 +2884,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("if("); emitter.emitJavascript(this.cond, TokenID.If, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascriptStatements(this.thenBod, true, false); @@ -2979,7 +2979,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("return "); emitter.emitJavascript(this.returnExpression, TokenID.Semicolon, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } else { emitter.writeToOutput("return;"); @@ -3110,11 +3110,11 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("for("); emitter.emitJavascript(this.lval, TokenID.For, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(" in "); emitter.emitJavascript(this.obj, TokenID.For, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascriptStatements(this.body, true, false); @@ -3198,23 +3198,23 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error !!! error TS2304: Cannot find name 'NodeType'. emitter.emitJavascript(this.init, TokenID.For, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } else { emitter.setInVarBlock((this.init).members.length); emitter.emitJavascriptList(this.init, null, TokenID.For, false, false, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } } emitter.writeToOutput("; "); emitter.emitJavascript(this.cond, TokenID.For, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput("; "); emitter.emitJavascript(this.incr, TokenID.For, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.emitJavascriptStatements(this.body, true, false); emitter.setInObjectLiteral(temp); @@ -3328,7 +3328,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error if (this.expr) { emitter.emitJavascript(this.expr, TokenID.With, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } emitter.writeToOutput(")"); @@ -3369,7 +3369,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("switch("); emitter.emitJavascript(this.val, TokenID.Identifier, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.writeLineToOutput(" {"); @@ -3379,7 +3379,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error var caseExpr = this.caseList.members[i]; emitter.emitJavascript(caseExpr, TokenID.Case, true); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeLineToOutput(""); } emitter.indenter.decreaseIndent(); @@ -3459,7 +3459,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("case "); emitter.emitJavascript(this.expr, TokenID.Identifier, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. } else { emitter.writeToOutput("default"); @@ -3532,7 +3532,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error typeFlow.inTypeRefTypeCheck = true; var typeLink = getTypeLink(this, typeFlow.checker, true); ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'getTypeLink'. Did you mean 'typeLink'? +!!! error TS2304: Cannot find name 'getTypeLink'. typeFlow.checker.resolveTypeLink(typeFlow.scope, typeLink, false); if (this.term) { @@ -3570,10 +3570,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.tryNode, TokenID.Try, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.emitJavascript(this.finallyNode, TokenID.Finally, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); } @@ -3634,10 +3634,10 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.recordSourceMappingStart(this); emitter.emitJavascript(this.tryNode, TokenID.Try, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.emitJavascript(this.catchNode, TokenID.Catch, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3703,7 +3703,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("try "); emitter.emitJavascript(this.body, TokenID.Try, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3754,12 +3754,12 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("catch ("); emitter.emitJavascript(this.param, TokenID.OpenParen, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.writeToOutput(")"); emitter.recordSourceMappingEnd(this.statement); emitter.emitJavascript(this.body, TokenID.Catch, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } @@ -3846,7 +3846,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource11.ts(2356,48): error emitter.writeToOutput("finally"); emitter.emitJavascript(this.body, TokenID.Finally, false); ~~~~~~~ -!!! error TS2552: Cannot find name 'TokenID'. Did you mean 'tokenId'? +!!! error TS2304: Cannot find name 'TokenID'. emitter.recordSourceMappingEnd(this); emitter.emitParensAndCommentsInPlace(this, false); } diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index 67f3f5e9a28..4e30bfe075f 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -196,7 +196,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(476,57): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(477,29): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,29): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,55): error TS2304: Cannot find name 'VarFlags'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2304: Cannot find name 'FieldSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,34): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,60): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(492,30): error TS2304: Cannot find name 'getTypeLink'. @@ -218,7 +218,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,26): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,52): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(518,22): error TS2304: Cannot find name 'FieldSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(531,29): error TS2304: Cannot find name 'ValueLocation'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2304: Cannot find name 'FieldSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,53): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,75): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(539,38): error TS2304: Cannot find name 'SymbolFlags'. @@ -1181,7 +1181,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(argDecl.id.text, argDecl.minChar, ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? +!!! error TS2304: Cannot find name 'FieldSymbol'. context.checker.locationInfo.unitIndex, !hasFlag(argDecl.varFlags, VarFlags.Readonly), ~~~~~~~ @@ -1278,7 +1278,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(varDecl.id.text, varDecl.minChar, ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? +!!! error TS2304: Cannot find name 'FieldSymbol'. context.checker.locationInfo.unitIndex, (varDecl.varFlags & VarFlags.Readonly) == VarFlags.None, ~~~~~~~~ diff --git a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt index c63ee2056b7..53865fd69ab 100644 --- a/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/parserS7.6_A4.2_T1.errors.txt @@ -8,29 +8,29 @@ tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(38,3): error TS tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(42,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(46,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(50,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(54,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(58,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(62,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(66,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(70,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(74,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(78,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(82,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(86,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(90,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(94,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(98,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(102,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(106,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(110,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(114,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(118,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(122,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(126,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(130,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(134,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(138,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(54,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(58,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(62,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(66,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(70,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(74,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(78,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(82,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(86,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(90,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(94,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(98,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(102,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(106,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(110,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(114,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(118,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(122,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(126,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(130,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(134,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(138,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error TS2304: Cannot find name '$ERROR'. ==== tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts (33 errors) ==== @@ -109,139 +109,139 @@ tests/cases/conformance/parser/ecmascript5/parserS7.6_A4.2_T1.ts(142,3): error T if (К !== 1) { $ERROR('#К'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041B = 1; if (Л !== 1) { $ERROR('#Л'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041C = 1; if (М !== 1) { $ERROR('#М'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041D = 1; if (Н !== 1) { $ERROR('#Н'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041E = 1; if (О !== 1) { $ERROR('#О'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041F = 1; if (П !== 1) { $ERROR('#П'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0420 = 1; if (Р !== 1) { $ERROR('#Р'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0421 = 1; if (С !== 1) { $ERROR('#С'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0422 = 1; if (Т !== 1) { $ERROR('#Т'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0423 = 1; if (У !== 1) { $ERROR('#У'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0424 = 1; if (Ф !== 1) { $ERROR('#Ф'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0425 = 1; if (Х !== 1) { $ERROR('#Х'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0426 = 1; if (Ц !== 1) { $ERROR('#Ц'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0427 = 1; if (Ч !== 1) { $ERROR('#Ч'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0428 = 1; if (Ш !== 1) { $ERROR('#Ш'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0429 = 1; if (Щ !== 1) { $ERROR('#Щ'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042A = 1; if (Ъ !== 1) { $ERROR('#Ъ'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042B = 1; if (Ы !== 1) { $ERROR('#Ы'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042C = 1; if (Ь !== 1) { $ERROR('#Ь'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042D = 1; if (Э !== 1) { $ERROR('#Э'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042E = 1; if (Ю !== 1) { $ERROR('#Ю'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042F = 1; if (Я !== 1) { $ERROR('#Я'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0401 = 1; if (Ё !== 1) { $ERROR('#Ё'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } \ No newline at end of file diff --git a/tests/baselines/reference/parserharness.errors.txt b/tests/baselines/reference/parserharness.errors.txt index b9ac11d3b6c..d4aa6682c40 100644 --- a/tests/baselines/reference/parserharness.errors.txt +++ b/tests/baselines/reference/parserharness.errors.txt @@ -29,51 +29,51 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,53): e tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,89): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,115): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(987,145): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(988,43): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(999,40): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1041,43): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1044,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1045,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1046,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1047,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1048,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1049,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1050,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1051,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1052,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1053,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1055,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1058,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1044,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1045,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1046,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1047,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1048,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1049,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1050,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1051,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1052,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1053,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1055,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1058,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1059,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1061,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1064,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1061,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1064,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1065,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1067,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1070,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1067,26): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1070,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1071,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1073,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1073,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1074,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1076,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1076,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1077,34): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1079,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1079,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1080,35): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1080,74): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1107,173): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1176,132): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1193,29): error TS2552: Cannot find name 'WScript'. Did you mean 'scripts'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1193,29): error TS2304: Cannot find name 'WScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1256,126): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1257,25): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1263,31): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1280,45): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1280,45): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1286,124): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1286,209): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1294,142): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1294,227): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1302,43): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1304,39): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1307,38): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1311,45): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1321,21): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1302,43): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1304,39): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1307,38): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1311,45): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1321,21): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1340,38): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1344,165): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1345,26): error TS2503: Cannot find namespace 'TypeScript'. @@ -85,21 +85,21 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1461,23): tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1466,36): error TS2304: Cannot find name 'optionRegex'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1484,21): error TS2304: Cannot find name 'optionRegex'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1548,57): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1571,32): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1571,32): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1582,59): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1591,24): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1600,24): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1591,24): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1600,24): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1604,42): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1605,21): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1705,38): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1706,26): error TS2304: Cannot find name 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1713,62): error TS2503: Cannot find namespace 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1713,87): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1714,30): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1724,34): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1739,20): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1714,30): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1724,34): error TS2304: Cannot find name 'TypeScript'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1739,20): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1746,80): error TS2503: Cannot find namespace 'TypeScript'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1750,26): error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1750,26): error TS2304: Cannot find name 'TypeScript'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1758,84): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1769,51): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1784,39): error TS2503: Cannot find namespace 'Services'. @@ -107,7 +107,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1784,61): tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1785,25): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1787,38): error TS2503: Cannot find namespace 'Services'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(1787,68): error TS2503: Cannot find namespace 'Services'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): error TS2552: Cannot find name 'Diff'. Did you mean 'diff'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): error TS2304: Cannot find name 'Diff'. ==== tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts (110 errors) ==== @@ -1162,7 +1162,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): !!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? var entries = new TypeScript.ScopeTraversal(compiler).getScopeEntries(enclosingScopeContext); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. for (var i = 0; i < entries.length; i++) { if (entries[i].name === targetIdentifier) { @@ -1224,88 +1224,88 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): switch (ast.nodeType) { case TypeScript.NodeType.Name: // Type Name? ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.Null: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.List: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.Empty: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.EmptyExpr: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.Asg: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.True: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.False: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.ArrayLit: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. case TypeScript.NodeType.TypeRef: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. break; case TypeScript.NodeType.Super: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).text; break; case TypeScript.NodeType.Regex: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).text; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.QString: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).text; break; case TypeScript.NodeType.NumberLit: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).text; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.Return: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. //name = (tyInfo.ast).returnExpression.actualText; // why is this complaining? break; case TypeScript.NodeType.InterfaceDeclaration: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.ModuleDeclaration: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.ClassDeclaration: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = (ast).name.actualText; ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. break; case TypeScript.NodeType.FuncDecl: ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. name = !(ast).name ? "" : (ast).name.actualText; // name == null for lambdas ~~~~~~~~~~ !!! error TS2503: Cannot find namespace 'TypeScript'. @@ -1429,7 +1429,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): else { WScript.Echo("non-match on: " + errorLines[i]); ~~~~~~~ -!!! error TS2552: Cannot find name 'WScript'. Did you mean 'scripts'? +!!! error TS2304: Cannot find name 'WScript'. } } } @@ -1524,7 +1524,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): if (Harness.usePull) { compiler.pullUpdateUnit(new TypeScript.StringSourceText(code), unitName, setRecovery); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } else { compiler.updateUnit(code, unitName, setRecovery); } @@ -1556,22 +1556,22 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var oldCompilerSettings = new TypeScript.CompilationSettings(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. clone(compiler.settings, oldCompilerSettings); var oldEmitSettings = new TypeScript.EmitOptions(compiler.settings); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. clone(compiler.emitSettings, oldEmitSettings); var oldModuleGenTarget = TypeScript.moduleGenTarget; ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. if (settingsCallback) { settingsCallback(compiler.settings); compiler.emitSettings = new TypeScript.EmitOptions(compiler.settings); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } try { compileString(code, filename, callback, context, references); @@ -1583,7 +1583,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): compiler.emitSettings = oldEmitSettings; TypeScript.moduleGenTarget = oldModuleGenTarget; ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } } } @@ -1857,7 +1857,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): length: this.content.length, editRange: new TypeScript.ScriptEditRange(minChar, limChar, (limChar - minChar) + newText.length) ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. }); if (this.editRanges.length > this.maxScriptVersions) { @@ -1881,7 +1881,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): // Too far away from what we know return TypeScript.ScriptEditRange.unknown(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } var entries = this.editRanges.slice(initialEditRangeIndex); @@ -1892,7 +1892,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): return new TypeScript.ScriptEditRange(minDistFromStart, entries[0].length - minDistFromEnd, aggDelta); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } } @@ -2020,7 +2020,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): !!! error TS2503: Cannot find namespace 'TypeScript'. var parser = new TypeScript.Parser(); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. parser.setErrorRecovery(null); parser.errorCallback = (a, b, c, d) => { }; @@ -2032,7 +2032,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): public parseFile(fileName: string) { var sourceText = new TypeScript.StringSourceText(IO.readFile(fileName)) ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. return this.parseSourceText(fileName, sourceText); } @@ -2049,7 +2049,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): return TypeScript.getPositionFromZeroBasedLineColumn(script, line - 1, col - 1); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. } /** @@ -2064,7 +2064,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): var result = TypeScript.getZeroBasedLineColumnFromPosition(script, position); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'TypeScript'. Did you mean 'TypeScriptLS'? +!!! error TS2304: Cannot find name 'TypeScript'. assert.is(result.line >= 0); assert.is(result.col >= 0); @@ -2360,7 +2360,7 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserharness.ts(2030,32): // Append diff to the report var diff = new Diff.StringDiff(expected, actual); ~~~~ -!!! error TS2552: Cannot find name 'Diff'. Did you mean 'diff'? +!!! error TS2304: Cannot find name 'Diff'. var header = '

' + descriptionForDescribe + '

'; header += '

Left file: ' + actualFilename + '; Right file: ' + refFilename + '

'; var trailer = '
'; diff --git a/tests/baselines/reference/parserindenter.errors.txt b/tests/baselines/reference/parserindenter.errors.txt index 5e97bfdabc1..2f51281e7aa 100644 --- a/tests/baselines/reference/parserindenter.errors.txt +++ b/tests/baselines/reference/parserindenter.errors.txt @@ -112,8 +112,8 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(634,21): tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(665,34): error TS2304: Cannot find name 'IndentationEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(686,45): error TS2304: Cannot find name 'TextEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(688,34): error TS2304: Cannot find name 'IndentationEditInfo'. -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(695,35): error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? -tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(698,39): error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(695,35): error TS2304: Cannot find name 'IndentationEditInfo'. +tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(698,39): error TS2304: Cannot find name 'IndentationEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(706,42): error TS2304: Cannot find name 'TextEditInfo'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(709,50): error TS2304: Cannot find name 'TokenSpan'. tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(709,67): error TS2304: Cannot find name 'ParseNode'. @@ -1053,12 +1053,12 @@ tests/cases/conformance/parser/ecmascript5/RealWorld/parserindenter.ts(736,38): indentationInfo = IndentationEditInfo.create2(indent.Position, indent.ReplaceWith, lineStartPosition, lineIndentLength); ~~~~~~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? +!!! error TS2304: Cannot find name 'IndentationEditInfo'. } else { indentationInfo = new IndentationEditInfo(indent); ~~~~~~~~~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'IndentationEditInfo'. Did you mean 'indentationInfo'? +!!! error TS2304: Cannot find name 'IndentationEditInfo'. } this.indentationBag.AddIndent(indentationInfo); diff --git a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt index 6d850d8567f..0213122e54f 100644 --- a/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt +++ b/tests/baselines/reference/scannerS7.6_A4.2_T1.errors.txt @@ -8,29 +8,29 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(38,3): error tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(42,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(46,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(50,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(54,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(58,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(62,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(66,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(70,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(74,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(78,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(82,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(86,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(90,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(94,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(98,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(102,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(106,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(110,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(114,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(118,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(122,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(126,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(130,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(134,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(138,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? -tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(54,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(58,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(62,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(66,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(70,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(74,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(78,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(82,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(86,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(90,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(94,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(98,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(102,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(106,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(110,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(114,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(118,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(122,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(126,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(130,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(134,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(138,3): error TS2304: Cannot find name '$ERROR'. +tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error TS2304: Cannot find name '$ERROR'. ==== tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts (33 errors) ==== @@ -109,139 +109,139 @@ tests/cases/conformance/scanner/ecmascript5/scannerS7.6_A4.2_T1.ts(142,3): error if (К !== 1) { $ERROR('#К'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041B = 1; if (Л !== 1) { $ERROR('#Л'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041C = 1; if (М !== 1) { $ERROR('#М'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041D = 1; if (Н !== 1) { $ERROR('#Н'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041E = 1; if (О !== 1) { $ERROR('#О'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u041F = 1; if (П !== 1) { $ERROR('#П'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0420 = 1; if (Р !== 1) { $ERROR('#Р'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0421 = 1; if (С !== 1) { $ERROR('#С'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0422 = 1; if (Т !== 1) { $ERROR('#Т'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0423 = 1; if (У !== 1) { $ERROR('#У'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0424 = 1; if (Ф !== 1) { $ERROR('#Ф'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0425 = 1; if (Х !== 1) { $ERROR('#Х'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0426 = 1; if (Ц !== 1) { $ERROR('#Ц'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0427 = 1; if (Ч !== 1) { $ERROR('#Ч'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0428 = 1; if (Ш !== 1) { $ERROR('#Ш'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0429 = 1; if (Щ !== 1) { $ERROR('#Щ'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042A = 1; if (Ъ !== 1) { $ERROR('#Ъ'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042B = 1; if (Ы !== 1) { $ERROR('#Ы'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042C = 1; if (Ь !== 1) { $ERROR('#Ь'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042D = 1; if (Э !== 1) { $ERROR('#Э'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042E = 1; if (Ю !== 1) { $ERROR('#Ю'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u042F = 1; if (Я !== 1) { $ERROR('#Я'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } var \u0401 = 1; if (Ё !== 1) { $ERROR('#Ё'); ~~~~~~ -!!! error TS2552: Cannot find name '$ERROR'. Did you mean 'Error'? +!!! error TS2304: Cannot find name '$ERROR'. } \ No newline at end of file diff --git a/tests/cases/compiler/maximum100SpellingSuggestions.ts b/tests/cases/compiler/maximum100SpellingSuggestions.ts deleted file mode 100644 index febc10c1c6f..00000000000 --- a/tests/cases/compiler/maximum100SpellingSuggestions.ts +++ /dev/null @@ -1,14 +0,0 @@ -// 10 anys per line, 12 lines -// the last two lines should not have spelling suggestions -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; -any; any; any; any; any; any; any; any; any; any; diff --git a/tests/cases/compiler/maximum10SpellingSuggestions.ts b/tests/cases/compiler/maximum10SpellingSuggestions.ts new file mode 100644 index 00000000000..7aa27dc1e2a --- /dev/null +++ b/tests/cases/compiler/maximum10SpellingSuggestions.ts @@ -0,0 +1,5 @@ +// 10 bobs on the first line +// the last two bobs should not have did-you-mean spelling suggestions +var blob; +bob; bob; bob; bob; bob; bob; bob; bob; bob; bob; +bob; bob; From 9bf520963227929ce9a3868c0b5ba894b224dc36 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Wed, 3 May 2017 10:46:00 -0700 Subject: [PATCH 27/92] Lower allowed length difference for suggestions And update baselines --- src/compiler/checker.ts | 2 +- .../reference/innerModExport2.errors.txt | 4 ++-- .../reference/parser15.4.4.14-9-2.errors.txt | 4 ++-- .../reference/parserRealSource7.errors.txt | 16 ++++++++-------- ...rRegularExpressionDivideAmbiguity1.errors.txt | 4 ++-- ...rRegularExpressionDivideAmbiguity2.errors.txt | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ebf33f166cd..1008c411474 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14205,7 +14205,7 @@ namespace ts { */ function getSpellingSuggestionForName(name: string, symbols: Symbol[], meaning: SymbolFlags): Symbol | undefined { const worstDistance = name.length * 0.4; - const maximumLengthDifference = Math.min(4, name.length * 0.34); + const maximumLengthDifference = Math.min(3, name.length * 0.34); let bestDistance = Number.MAX_VALUE; let bestCandidate = undefined; if (name.length > 30) { diff --git a/tests/baselines/reference/innerModExport2.errors.txt b/tests/baselines/reference/innerModExport2.errors.txt index edd22daca41..f9568bb45a4 100644 --- a/tests/baselines/reference/innerModExport2.errors.txt +++ b/tests/baselines/reference/innerModExport2.errors.txt @@ -2,7 +2,7 @@ tests/cases/compiler/innerModExport2.ts(5,5): error TS2304: Cannot find name 'mo tests/cases/compiler/innerModExport2.ts(5,12): error TS1005: ';' expected. tests/cases/compiler/innerModExport2.ts(7,20): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local. tests/cases/compiler/innerModExport2.ts(13,9): error TS2395: Individual declarations in merged declaration 'export_var' must be all exported or all local. -tests/cases/compiler/innerModExport2.ts(20,7): error TS2551: Property 'NonExportFunc' does not exist on type 'typeof Outer'. Did you mean 'ExportFunc'? +tests/cases/compiler/innerModExport2.ts(20,7): error TS2339: Property 'NonExportFunc' does not exist on type 'typeof Outer'. ==== tests/cases/compiler/innerModExport2.ts (5 errors) ==== @@ -35,4 +35,4 @@ tests/cases/compiler/innerModExport2.ts(20,7): error TS2551: Property 'NonExport Outer.NonExportFunc(); ~~~~~~~~~~~~~ -!!! error TS2551: Property 'NonExportFunc' does not exist on type 'typeof Outer'. Did you mean 'ExportFunc'? \ No newline at end of file +!!! error TS2339: Property 'NonExportFunc' does not exist on type 'typeof Outer'. \ No newline at end of file diff --git a/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt b/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt index 143592f649a..2c721724b3e 100644 --- a/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt +++ b/tests/baselines/reference/parser15.4.4.14-9-2.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(16,15): error TS2453: The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'number' is not a valid type argument because it is not a supertype of candidate 'false'. -tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error TS2552: Cannot find name 'runTestCase'. Did you mean 'testcase'? +tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error TS2304: Cannot find name 'runTestCase'. ==== tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts (2 errors) ==== @@ -33,5 +33,5 @@ tests/cases/conformance/parser/ecmascript5/parser15.4.4.14-9-2.ts(25,1): error T } runTestCase(testcase); ~~~~~~~~~~~ -!!! error TS2552: Cannot find name 'runTestCase'. Did you mean 'testcase'? +!!! error TS2304: Cannot find name 'runTestCase'. \ No newline at end of file diff --git a/tests/baselines/reference/parserRealSource7.errors.txt b/tests/baselines/reference/parserRealSource7.errors.txt index 4e30bfe075f..1261d7b5f06 100644 --- a/tests/baselines/reference/parserRealSource7.errors.txt +++ b/tests/baselines/reference/parserRealSource7.errors.txt @@ -71,7 +71,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,48): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,66): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,90): error TS2304: Cannot find name 'StringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(206,113): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(207,31): error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(207,31): error TS2304: Cannot find name 'ModuleType'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(209,42): error TS2304: Cannot find name 'TypeFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(211,39): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(211,57): error TS2304: Cannot find name 'DualStringHashTable'. @@ -100,7 +100,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(250,82): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,38): error TS2304: Cannot find name 'ScopedMembers'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,56): error TS2304: Cannot find name 'DualStringHashTable'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(251,107): error TS2304: Cannot find name 'StringHashTable'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(253,27): error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(253,27): error TS2304: Cannot find name 'ModuleType'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(255,38): error TS2304: Cannot find name 'TypeFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(272,33): error TS2304: Cannot find name 'SymbolFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(276,33): error TS2304: Cannot find name 'SymbolFlags'. @@ -196,7 +196,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(476,57): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(477,29): error TS2304: Cannot find name 'ValueLocation'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,29): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(478,55): error TS2304: Cannot find name 'VarFlags'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2304: Cannot find name 'FieldSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(480,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,34): error TS2304: Cannot find name 'hasFlag'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(482,60): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(492,30): error TS2304: Cannot find name 'getTypeLink'. @@ -218,7 +218,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,26): error T tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(507,52): error TS2304: Cannot find name 'ASTFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(518,22): error TS2304: Cannot find name 'FieldSymbol'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(531,29): error TS2304: Cannot find name 'ValueLocation'. -tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2304: Cannot find name 'FieldSymbol'. +tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(533,21): error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,53): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(535,75): error TS2304: Cannot find name 'VarFlags'. tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(539,38): error TS2304: Cannot find name 'SymbolFlags'. @@ -658,7 +658,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T !!! error TS2304: Cannot find name 'StringHashTable'. modType = new ModuleType(enclosedTypes, ambientEnclosedTypes); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? +!!! error TS2304: Cannot find name 'ModuleType'. if (isEnum) { modType.typeFlags |= TypeFlags.IsEnum; ~~~~~~~~~ @@ -762,7 +762,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T modType = new ModuleType(enclosedTypes, ambientEnclosedTypes); ~~~~~~~~~~ -!!! error TS2552: Cannot find name 'ModuleType'. Did you mean 'modType'? +!!! error TS2304: Cannot find name 'ModuleType'. if (isEnum) { modType.typeFlags |= TypeFlags.IsEnum; ~~~~~~~~~ @@ -1181,7 +1181,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(argDecl.id.text, argDecl.minChar, ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'FieldSymbol'. +!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? context.checker.locationInfo.unitIndex, !hasFlag(argDecl.varFlags, VarFlags.Readonly), ~~~~~~~ @@ -1278,7 +1278,7 @@ tests/cases/conformance/parser/ecmascript5/parserRealSource7.ts(828,13): error T var fieldSymbol = new FieldSymbol(varDecl.id.text, varDecl.minChar, ~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'FieldSymbol'. +!!! error TS2552: Cannot find name 'FieldSymbol'. Did you mean 'fieldSymbol'? context.checker.locationInfo.unitIndex, (varDecl.varFlags & VarFlags.Readonly) == VarFlags.None, ~~~~~~~~ diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt index cf1bd1fd2e2..ab0c1dc4d2e 100644 --- a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity1.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,2): error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? +tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,2): error TS2304: Cannot find name 'notregexp'. tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity1.ts(2,12): error TS2304: Cannot find name 'a'. @@ -6,6 +6,6 @@ tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpre 1 /notregexp/a.foo(); ~~~~~~~~~ -!!! error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? +!!! error TS2304: Cannot find name 'notregexp'. ~ !!! error TS2304: Cannot find name 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt index cfe5b118ee5..eac54ef0fe4 100644 --- a/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt +++ b/tests/baselines/reference/parserRegularExpressionDivideAmbiguity2.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,6): error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? +tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,6): error TS2304: Cannot find name 'notregexp'. tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts(1,16): error TS2304: Cannot find name 'a'. ==== tests/cases/conformance/parser/ecmascript5/RegularExpressions/parserRegularExpressionDivideAmbiguity2.ts (2 errors) ==== (1) /notregexp/a.foo(); ~~~~~~~~~ -!!! error TS2552: Cannot find name 'notregexp'. Did you mean 'RegExp'? +!!! error TS2304: Cannot find name 'notregexp'. ~ !!! error TS2304: Cannot find name 'a'. \ No newline at end of file From 99c18744d231fdce63f92951197388a8eb17ee0e Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Wed, 3 May 2017 10:57:57 -0700 Subject: [PATCH 28/92] Add isCallOrNewExpression helper --- src/compiler/checker.ts | 3 ++- src/compiler/utilities.ts | 4 ++++ src/services/formatting/smartIndenter.ts | 5 +---- src/services/signatureHelp.ts | 2 +- src/services/symbolDisplay.ts | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b6ff059380e..61503415d81 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -14310,7 +14310,8 @@ namespace ts { } function callLikeExpressionMayHaveTypeArguments(node: CallLikeExpression): node is CallExpression | NewExpression { - return node.kind === SyntaxKind.CallExpression || node.kind === SyntaxKind.NewExpression; + // TODO: Also include tagged templates (https://github.com/Microsoft/TypeScript/issues/11947) + return isCallOrNewExpression(node); } function resolveUntypedCall(node: CallLikeExpression): Signature { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 5314bdacb43..b9b1dbb2a13 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1142,6 +1142,10 @@ namespace ts { } } + export function isCallOrNewExpression(node: Node): node is CallExpression | NewExpression { + return node.kind === SyntaxKind.CallExpression || node.kind === SyntaxKind.NewExpression; + } + export function getInvokedExpression(node: CallLikeExpression): Expression { if (node.kind === SyntaxKind.TaggedTemplateExpression) { return (node).tag; diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index 01feaf39081..18b0479c85a 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -341,10 +341,7 @@ namespace ts.formatting { return Value.Unknown; } - if (node.parent && ( - node.parent.kind === SyntaxKind.CallExpression || - node.parent.kind === SyntaxKind.NewExpression) && - (node.parent).expression !== node) { + if (node.parent && isCallOrNewExpression(node.parent) && (node.parent).expression !== node) { const fullCallOrNewExpression = (node.parent).expression; const startingExpression = getStartingExpression(fullCallOrNewExpression); diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 1487bb410a5..7c4f8fb016d 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -262,7 +262,7 @@ namespace ts.SignatureHelp { * in the argument of an invocation; returns undefined otherwise. */ export function getImmediatelyContainingArgumentInfo(node: Node, position: number, sourceFile: SourceFile): ArgumentListInfo { - if (node.parent.kind === SyntaxKind.CallExpression || node.parent.kind === SyntaxKind.NewExpression) { + if (isCallOrNewExpression(node.parent)) { const callExpression = node.parent; // There are 3 cases to handle: // 1. The token introduces a list, and should begin a signature help session diff --git a/src/services/symbolDisplay.ts b/src/services/symbolDisplay.ts index 41bdf4d8ada..5bf3e37f28a 100644 --- a/src/services/symbolDisplay.ts +++ b/src/services/symbolDisplay.ts @@ -120,7 +120,7 @@ namespace ts.SymbolDisplay { // try get the call/construct signature from the type if it matches let callExpressionLike: CallExpression | NewExpression | JsxOpeningLikeElement; - if (location.kind === SyntaxKind.CallExpression || location.kind === SyntaxKind.NewExpression) { + if (isCallOrNewExpression(location)) { callExpressionLike = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { From 1125657210ae94f1990683425208b88b41d32557 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 2 May 2017 20:54:27 -0700 Subject: [PATCH 29/92] Don't stop checking other attributes even though we see spread type. This is so that things are correctly marked as reference and type-checked --- src/compiler/checker.ts | 42 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ca5d65068a0..1e483eb80cd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13248,6 +13248,8 @@ namespace ts { let attributesTable = createMap(); let spread: Type = emptyObjectType; let attributesArray: Symbol[] = []; + let hasSpreadAnyType = false; + for (const attributeDecl of attributes.properties) { const member = attributeDecl.symbol; if (isJsxAttribute(attributeDecl)) { @@ -13276,31 +13278,33 @@ namespace ts { const exprType = checkExpression(attributeDecl.expression); if (!isValidSpreadType(exprType)) { error(attributeDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types); - return anyType; + hasSpreadAnyType = true; } if (isTypeAny(exprType)) { - return anyType; + hasSpreadAnyType = true; } spread = getSpreadType(spread, exprType); } } - if (spread !== emptyObjectType) { - if (attributesArray.length > 0) { - spread = getSpreadType(spread, createJsxAttributesType(attributes.symbol, attributesTable)); - attributesArray = []; - attributesTable = createMap(); - } - attributesArray = getPropertiesOfType(spread); - } - - attributesTable = createMap(); - if (attributesArray) { - forEach(attributesArray, (attr) => { - if (!filter || filter(attr)) { - attributesTable.set(attr.name, attr); + if (!hasSpreadAnyType) { + if (spread !== emptyObjectType) { + if (attributesArray.length > 0) { + spread = getSpreadType(spread, createJsxAttributesType(attributes.symbol, attributesTable)); + attributesArray = []; + attributesTable = createMap(); } - }); + attributesArray = getPropertiesOfType(spread); + } + + attributesTable = createMap(); + if (attributesArray) { + forEach(attributesArray, (attr) => { + if (!filter || filter(attr)) { + attributesTable.set(attr.name, attr); + } + }); + } } // Handle children attribute @@ -13324,7 +13328,7 @@ namespace ts { // Error if there is a attribute named "children" and children element. // This is because children element will overwrite the value from attributes const jsxChildrenPropertyName = getJsxElementChildrenPropertyname(); - if (jsxChildrenPropertyName && jsxChildrenPropertyName !== "") { + if (!hasSpreadAnyType && jsxChildrenPropertyName && jsxChildrenPropertyName !== "") { if (attributesTable.has(jsxChildrenPropertyName)) { error(attributes, Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, jsxChildrenPropertyName); } @@ -13338,7 +13342,7 @@ namespace ts { } } - return createJsxAttributesType(attributes.symbol, attributesTable); + return hasSpreadAnyType ? anyType : createJsxAttributesType(attributes.symbol, attributesTable); /** * Create anonymous type from given attributes symbol table. From 6d4f83f1b2ed247d0564a887b2fa8a16a1371ecb Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 2 May 2017 20:54:42 -0700 Subject: [PATCH 30/92] Update baseline --- ...atelessFunctionComponentsWithTypeArguments3.errors.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt index 1d03542738f..fdf65ca1746 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt @@ -3,10 +3,12 @@ tests/cases/conformance/jsx/file.tsx(10,33): error TS2698: Spread types may only tests/cases/conformance/jsx/file.tsx(11,33): error TS2698: Spread types may only be created from object types. tests/cases/conformance/jsx/file.tsx(12,33): error TS2698: Spread types may only be created from object types. tests/cases/conformance/jsx/file.tsx(14,33): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(14,63): error TS2698: Spread types may only be created from object types. tests/cases/conformance/jsx/file.tsx(15,33): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(15,55): error TS2698: Spread types may only be created from object types. -==== tests/cases/conformance/jsx/file.tsx (6 errors) ==== +==== tests/cases/conformance/jsx/file.tsx (8 errors) ==== import React = require('react') declare function OverloadComponent(): JSX.Element; @@ -30,9 +32,13 @@ tests/cases/conformance/jsx/file.tsx(15,33): error TS2698: Spread types may only let a4 = ; let a5 = ; ~~~~~~~~~ +!!! error TS2698: Spread types may only be created from object types. + ~~~~~~~~~ !!! error TS2698: Spread types may only be created from object types. let a6 = ; ~~~~~~~~~ +!!! error TS2698: Spread types may only be created from object types. + ~~~~~~~~~ !!! error TS2698: Spread types may only be created from object types. } From f3a3198bec48c21a1ad623f172ac2b449c86f42b Mon Sep 17 00:00:00 2001 From: Yui T Date: Wed, 3 May 2017 13:30:30 -0700 Subject: [PATCH 31/92] Add tests and update baselines --- .../correctlyMarkAliasAsReferences1.js | 23 ++++++++++++ .../correctlyMarkAliasAsReferences1.symbols | 29 +++++++++++++++ .../correctlyMarkAliasAsReferences1.types | 35 ++++++++++++++++++ .../correctlyMarkAliasAsReferences2.js | 23 ++++++++++++ .../correctlyMarkAliasAsReferences2.symbols | 30 ++++++++++++++++ .../correctlyMarkAliasAsReferences2.types | 36 +++++++++++++++++++ .../correctlyMarkAliasAsReferences3.js | 23 ++++++++++++ .../correctlyMarkAliasAsReferences3.symbols | 29 +++++++++++++++ .../correctlyMarkAliasAsReferences3.types | 35 ++++++++++++++++++ .../correctlyMarkAliasAsReferences4.js | 19 ++++++++++ .../correctlyMarkAliasAsReferences4.symbols | 24 +++++++++++++ .../correctlyMarkAliasAsReferences4.types | 29 +++++++++++++++ .../jsx/correctlyMarkAliasAsReferences1.tsx | 17 +++++++++ .../jsx/correctlyMarkAliasAsReferences2.tsx | 17 +++++++++ .../jsx/correctlyMarkAliasAsReferences3.tsx | 18 ++++++++++ .../jsx/correctlyMarkAliasAsReferences4.tsx | 15 ++++++++ tests/lib/react.d.ts | 4 +-- 17 files changed, 404 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences1.js create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences1.types create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences2.js create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences2.types create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences3.js create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences3.types create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences4.js create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences4.symbols create mode 100644 tests/baselines/reference/correctlyMarkAliasAsReferences4.types create mode 100644 tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx create mode 100644 tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx create mode 100644 tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx create mode 100644 tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.js b/tests/baselines/reference/correctlyMarkAliasAsReferences1.js new file mode 100644 index 00000000000..7816881f4a2 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.js @@ -0,0 +1,23 @@ +//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences1.tsx] //// + +//// [declaration.d.ts] +declare module "classnames"; + +//// [0.tsx] +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps; // any +let k = ; + + +//// [0.js] +/// +import * as cx from 'classnames'; +import * as React from "react"; +let buttonProps; // any +let k = React.createElement("button", Object.assign({}, buttonProps), + React.createElement("span", { className: cx('class1', { class2: true }) })); diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols new file mode 100644 index 00000000000..3267a29050e --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.symbols @@ -0,0 +1,29 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : Symbol(cx, Decl(0.tsx, 1, 6)) + +import * as React from "react"; +>React : Symbol(React, Decl(0.tsx, 2, 6)) + +let buttonProps; // any +>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3)) + +let k = ; +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences1.types b/tests/baselines/reference/correctlyMarkAliasAsReferences1.types new file mode 100644 index 00000000000..dbcad2fdc3c --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences1.types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : any + +import * as React from "react"; +>React : typeof React + +let buttonProps; // any +>buttonProps : any + +let k = : JSX.Element +>button : any +>buttonProps : any + + +> : JSX.Element +>span : any +>className : any +>cx('class1', { class2: true }) : any +>cx : any +>'class1' : "class1" +>{ class2: true } : { class2: boolean; } +>class2 : boolean +>true : true + + ; +>button : any + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.js b/tests/baselines/reference/correctlyMarkAliasAsReferences2.js new file mode 100644 index 00000000000..7af59b017a8 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.js @@ -0,0 +1,23 @@ +//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx] //// + +//// [declaration.d.ts] +declare module "classnames"; + +//// [0.tsx] +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps : {[attributeName: string]: ''} +let k = ; + + +//// [0.js] +/// +import * as cx from 'classnames'; +import * as React from "react"; +let buttonProps; +let k = React.createElement("button", Object.assign({}, buttonProps), + React.createElement("span", { className: cx('class1', { class2: true }) })); diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols new file mode 100644 index 00000000000..76d9b8cdfe0 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.symbols @@ -0,0 +1,30 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : Symbol(cx, Decl(0.tsx, 1, 6)) + +import * as React from "react"; +>React : Symbol(React, Decl(0.tsx, 2, 6)) + +let buttonProps : {[attributeName: string]: ''} +>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3)) +>attributeName : Symbol(attributeName, Decl(0.tsx, 4, 20)) + +let k = ; +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences2.types b/tests/baselines/reference/correctlyMarkAliasAsReferences2.types new file mode 100644 index 00000000000..cfaba960da2 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences2.types @@ -0,0 +1,36 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : any + +import * as React from "react"; +>React : typeof React + +let buttonProps : {[attributeName: string]: ''} +>buttonProps : { [attributeName: string]: ""; } +>attributeName : string + +let k = : JSX.Element +>button : any +>buttonProps : { [attributeName: string]: ""; } + + +> : JSX.Element +>span : any +>className : any +>cx('class1', { class2: true }) : any +>cx : any +>'class1' : "class1" +>{ class2: true } : { class2: boolean; } +>class2 : boolean +>true : true + + ; +>button : any + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.js b/tests/baselines/reference/correctlyMarkAliasAsReferences3.js new file mode 100644 index 00000000000..166e29d56db --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.js @@ -0,0 +1,23 @@ +//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx] //// + +//// [declaration.d.ts] +declare module "classnames"; + +//// [0.tsx] +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps; +let k = ; + + +//// [0.js] +/// +import * as cx from 'classnames'; +import * as React from "react"; +let buttonProps; +let k = React.createElement("button", Object.assign({}, buttonProps), + React.createElement("span", { className: cx('class1', { class2: true }) })); diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols b/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols new file mode 100644 index 00000000000..088f553baa4 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.symbols @@ -0,0 +1,29 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : Symbol(cx, Decl(0.tsx, 1, 6)) + +import * as React from "react"; +>React : Symbol(React, Decl(0.tsx, 2, 6)) + +let buttonProps; +>buttonProps : Symbol(buttonProps, Decl(0.tsx, 4, 3)) + +let k = ; +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences3.types b/tests/baselines/reference/correctlyMarkAliasAsReferences3.types new file mode 100644 index 00000000000..cca59ae2f5e --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences3.types @@ -0,0 +1,35 @@ +=== tests/cases/conformance/jsx/0.tsx === +/// +import * as cx from 'classnames'; +>cx : any + +import * as React from "react"; +>React : typeof React + +let buttonProps; +>buttonProps : any + +let k = : JSX.Element +>button : any +>buttonProps : undefined + + +> : JSX.Element +>span : any +>className : any +>cx('class1', { class2: true }) : any +>cx : any +>'class1' : "class1" +>{ class2: true } : { class2: boolean; } +>class2 : boolean +>true : true + + ; +>button : any + +=== tests/cases/conformance/jsx/declaration.d.ts === +declare module "classnames"; +No type information for this code. +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/correctlyMarkAliasAsReferences4.js b/tests/baselines/reference/correctlyMarkAliasAsReferences4.js new file mode 100644 index 00000000000..631d06cc5b3 --- /dev/null +++ b/tests/baselines/reference/correctlyMarkAliasAsReferences4.js @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx] //// + +//// [declaration.d.ts] +declare module "classnames"; + +//// [0.tsx] +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps : {[attributeName: string]: ''} +let k = ; diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx new file mode 100644 index 00000000000..9755c624fc5 --- /dev/null +++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences2.tsx @@ -0,0 +1,17 @@ +// @target: es2017 +// @jsx: react +// @moduleResolution: node +// @libFiles: react.d.ts,lib.d.ts + +// @filename: declaration.d.ts +declare module "classnames"; + +// @filename: 0.tsx +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps : {[attributeName: string]: ''} +let k = ; diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx new file mode 100644 index 00000000000..c3bfb0c8a47 --- /dev/null +++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences3.tsx @@ -0,0 +1,18 @@ +// @target: es2017 +// @jsx: react +// @moduleResolution: node +// @noImplicitAny: true +// @libFiles: react.d.ts,lib.d.ts + +// @filename: declaration.d.ts +declare module "classnames"; + +// @filename: 0.tsx +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps; +let k = ; diff --git a/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx new file mode 100644 index 00000000000..edb9f75f87b --- /dev/null +++ b/tests/cases/conformance/jsx/correctlyMarkAliasAsReferences4.tsx @@ -0,0 +1,15 @@ +// @target: es2017 +// @jsx: react +// @moduleResolution: node +// @libFiles: react.d.ts,lib.d.ts + +// @filename: declaration.d.ts +declare module "classnames"; + +// @filename: 0.tsx +/// +import * as cx from 'classnames'; +import * as React from "react"; + +let buttonProps : {[attributeName: string]: ''} +let k = ); + } +} + + +//// [file.jsx] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var React = require("react"); +var Button = (function (_super) { + __extends(Button, _super); + function Button() { + return _super !== null && _super.apply(this, arguments) || this; + } + Button.prototype.render = function () { + return ; + }; + return Button; +}(React.Component)); +var InnerButton = (function (_super) { + __extends(InnerButton, _super); + function InnerButton() { + return _super !== null && _super.apply(this, arguments) || this; + } + InnerButton.prototype.render = function () { + return (); + }; + return InnerButton; +}(React.Component)); diff --git a/tests/baselines/reference/checkJsxChildrenProperty12.symbols b/tests/baselines/reference/checkJsxChildrenProperty12.symbols new file mode 100644 index 00000000000..7b45ad96cf4 --- /dev/null +++ b/tests/baselines/reference/checkJsxChildrenProperty12.symbols @@ -0,0 +1,59 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : Symbol(React, Decl(file.tsx, 0, 0)) + +interface ButtonProp { +>ButtonProp : Symbol(ButtonProp, Decl(file.tsx, 0, 32)) + + a: number, +>a : Symbol(ButtonProp.a, Decl(file.tsx, 2, 22)) + + b: string, +>b : Symbol(ButtonProp.b, Decl(file.tsx, 3, 14)) + + children: Button; +>children : Symbol(ButtonProp.children, Decl(file.tsx, 4, 14)) +>Button : Symbol(Button, Decl(file.tsx, 6, 1)) +} + +class Button extends React.Component { +>Button : Symbol(Button, Decl(file.tsx, 6, 1)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) +>ButtonProp : Symbol(ButtonProp, Decl(file.tsx, 0, 32)) + + render() { +>render : Symbol(Button.render, Decl(file.tsx, 8, 55)) + + return +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 16, 1)) +>this.props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) +>this : Symbol(Button, Decl(file.tsx, 6, 1)) +>props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) + } +} + +interface InnerButtonProp { +>InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 12, 1)) + + a: number +>a : Symbol(InnerButtonProp.a, Decl(file.tsx, 14, 27)) +} + +class InnerButton extends React.Component { +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 16, 1)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) +>InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 12, 1)) + + render() { +>render : Symbol(InnerButton.render, Decl(file.tsx, 18, 65)) + + return (); +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) + } +} + diff --git a/tests/baselines/reference/checkJsxChildrenProperty12.types b/tests/baselines/reference/checkJsxChildrenProperty12.types new file mode 100644 index 00000000000..cc2d2300828 --- /dev/null +++ b/tests/baselines/reference/checkJsxChildrenProperty12.types @@ -0,0 +1,62 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : typeof React + +interface ButtonProp { +>ButtonProp : ButtonProp + + a: number, +>a : number + + b: string, +>b : string + + children: Button; +>children : Button +>Button : Button +} + +class Button extends React.Component { +>Button : Button +>React.Component : React.Component +>React : typeof React +>Component : typeof React.Component +>ButtonProp : ButtonProp + + render() { +>render : () => JSX.Element + + return +> : JSX.Element +>InnerButton : typeof InnerButton +>this.props : ButtonProp & { children?: React.ReactNode; } +>this : this +>props : ButtonProp & { children?: React.ReactNode; } + } +} + +interface InnerButtonProp { +>InnerButtonProp : InnerButtonProp + + a: number +>a : number +} + +class InnerButton extends React.Component { +>InnerButton : InnerButton +>React.Component : React.Component +>React : typeof React +>Component : typeof React.Component +>InnerButtonProp : InnerButtonProp + + render() { +>render : () => JSX.Element + + return (); +>() : JSX.Element +> : JSX.Element +>button : any +>button : any + } +} + diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.js b/tests/baselines/reference/tsxSpreadAttributesResolution13.js new file mode 100644 index 00000000000..f1626414397 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.js @@ -0,0 +1,36 @@ +//// [file.tsx] +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + + ); +} + +interface AnotherComponentProps { + property1: string; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} + +//// [file.jsx] +"use strict"; +exports.__esModule = true; +var React = require("react"); +function Component(props) { + return (); +} +exports["default"] = Component; +function AnotherComponent(_a) { + var property1 = _a.property1; + return ({property1}); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols b/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols new file mode 100644 index 00000000000..1923c39c85a --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols @@ -0,0 +1,47 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : Symbol(React, Decl(file.tsx, 0, 0)) + +interface ComponentProps { +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 0, 32)) + + property1: string; +>property1 : Symbol(ComponentProps.property1, Decl(file.tsx, 2, 26)) + + property2: number; +>property2 : Symbol(ComponentProps.property2, Decl(file.tsx, 3, 22)) +} + +export default function Component(props: ComponentProps) { +>Component : Symbol(Component, Decl(file.tsx, 5, 1)) +>props : Symbol(props, Decl(file.tsx, 7, 34)) +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 0, 32)) + + return ( + +>AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 15, 1)) +>props : Symbol(props, Decl(file.tsx, 7, 34)) + + ); +} + +interface AnotherComponentProps { +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) + + property1: string; +>property1 : Symbol(AnotherComponentProps.property1, Decl(file.tsx, 13, 33)) +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { +>AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 15, 1)) +>property1 : Symbol(property1, Decl(file.tsx, 17, 27)) +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) + + return ( + {property1} +>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) +>property1 : Symbol(property1, Decl(file.tsx, 17, 27)) +>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) + + ); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.types b/tests/baselines/reference/tsxSpreadAttributesResolution13.types new file mode 100644 index 00000000000..0c231dddece --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.types @@ -0,0 +1,53 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : typeof React + +interface ComponentProps { +>ComponentProps : ComponentProps + + property1: string; +>property1 : string + + property2: number; +>property2 : number +} + +export default function Component(props: ComponentProps) { +>Component : (props: ComponentProps) => JSX.Element +>props : ComponentProps +>ComponentProps : ComponentProps + + return ( +>( ) : JSX.Element + + +> : JSX.Element +>AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element +>props : ComponentProps + + ); +} + +interface AnotherComponentProps { +>AnotherComponentProps : AnotherComponentProps + + property1: string; +>property1 : string +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { +>AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element +>property1 : string +>AnotherComponentProps : AnotherComponentProps + + return ( +>( {property1} ) : JSX.Element + + {property1} +>{property1} : JSX.Element +>span : any +>property1 : string +>span : any + + ); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution14.errors.txt b/tests/baselines/reference/tsxSpreadAttributesResolution14.errors.txt new file mode 100644 index 00000000000..536d2e75f84 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution14.errors.txt @@ -0,0 +1,29 @@ +tests/cases/conformance/jsx/file.tsx(11,38): error TS2339: Property 'Property1' does not exist on type 'IntrinsicAttributes & AnotherComponentProps'. + + +==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== + import React = require('react'); + + interface ComponentProps { + property1: string; + property2: number; + } + + export default function Component(props: ComponentProps) { + return ( + // Error extra property + + ~~~~~~~~~ +!!! error TS2339: Property 'Property1' does not exist on type 'IntrinsicAttributes & AnotherComponentProps'. + ); + } + + interface AnotherComponentProps { + property1: string; + } + + function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); + } \ No newline at end of file diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution14.js b/tests/baselines/reference/tsxSpreadAttributesResolution14.js new file mode 100644 index 00000000000..d04c9cd6d99 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution14.js @@ -0,0 +1,39 @@ +//// [file.tsx] +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + // Error extra property + + ); +} + +interface AnotherComponentProps { + property1: string; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} + +//// [file.jsx] +"use strict"; +exports.__esModule = true; +var React = require("react"); +function Component(props) { + return ( + // Error extra property + ); +} +exports["default"] = Component; +function AnotherComponent(_a) { + var property1 = _a.property1; + return ({property1}); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution15.js b/tests/baselines/reference/tsxSpreadAttributesResolution15.js new file mode 100644 index 00000000000..41302f22a61 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution15.js @@ -0,0 +1,38 @@ +//// [file.tsx] +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + + ); +} + +interface AnotherComponentProps { + property1: string; + AnotherProperty1: string; + property2: boolean; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} + +//// [file.jsx] +"use strict"; +exports.__esModule = true; +var React = require("react"); +function Component(props) { + return (); +} +exports["default"] = Component; +function AnotherComponent(_a) { + var property1 = _a.property1; + return ({property1}); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution15.symbols b/tests/baselines/reference/tsxSpreadAttributesResolution15.symbols new file mode 100644 index 00000000000..00e10954821 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution15.symbols @@ -0,0 +1,55 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : Symbol(React, Decl(file.tsx, 0, 0)) + +interface ComponentProps { +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 0, 32)) + + property1: string; +>property1 : Symbol(ComponentProps.property1, Decl(file.tsx, 2, 26)) + + property2: number; +>property2 : Symbol(ComponentProps.property2, Decl(file.tsx, 3, 22)) +} + +export default function Component(props: ComponentProps) { +>Component : Symbol(Component, Decl(file.tsx, 5, 1)) +>props : Symbol(props, Decl(file.tsx, 7, 34)) +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 0, 32)) + + return ( + +>AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 17, 1)) +>props : Symbol(props, Decl(file.tsx, 7, 34)) +>property2 : Symbol(property2, Decl(file.tsx, 9, 36)) +>AnotherProperty1 : Symbol(AnotherProperty1, Decl(file.tsx, 9, 46)) + + ); +} + +interface AnotherComponentProps { +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) + + property1: string; +>property1 : Symbol(AnotherComponentProps.property1, Decl(file.tsx, 13, 33)) + + AnotherProperty1: string; +>AnotherProperty1 : Symbol(AnotherComponentProps.AnotherProperty1, Decl(file.tsx, 14, 22)) + + property2: boolean; +>property2 : Symbol(AnotherComponentProps.property2, Decl(file.tsx, 15, 29)) +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { +>AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 17, 1)) +>property1 : Symbol(property1, Decl(file.tsx, 19, 27)) +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) + + return ( + {property1} +>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) +>property1 : Symbol(property1, Decl(file.tsx, 19, 27)) +>span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) + + ); +} diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution15.types b/tests/baselines/reference/tsxSpreadAttributesResolution15.types new file mode 100644 index 00000000000..dbcb6541a03 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution15.types @@ -0,0 +1,61 @@ +=== tests/cases/conformance/jsx/file.tsx === +import React = require('react'); +>React : typeof React + +interface ComponentProps { +>ComponentProps : ComponentProps + + property1: string; +>property1 : string + + property2: number; +>property2 : number +} + +export default function Component(props: ComponentProps) { +>Component : (props: ComponentProps) => JSX.Element +>props : ComponentProps +>ComponentProps : ComponentProps + + return ( +>( ) : JSX.Element + + +> : JSX.Element +>AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element +>props : ComponentProps +>property2 : true +>AnotherProperty1 : string + + ); +} + +interface AnotherComponentProps { +>AnotherComponentProps : AnotherComponentProps + + property1: string; +>property1 : string + + AnotherProperty1: string; +>AnotherProperty1 : string + + property2: boolean; +>property2 : boolean +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { +>AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element +>property1 : string +>AnotherComponentProps : AnotherComponentProps + + return ( +>( {property1} ) : JSX.Element + + {property1} +>{property1} : JSX.Element +>span : any +>property1 : string +>span : any + + ); +} diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx new file mode 100644 index 00000000000..ba42e9e83d4 --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx @@ -0,0 +1,28 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ButtonProp { + a: number, + b: string, + children: Button; +} + +class Button extends React.Component { + render() { + return + } +} + +interface InnerButtonProp { + a: number +} + +class InnerButton extends React.Component { + render() { + return (); + } +} diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx new file mode 100644 index 00000000000..dda315b0826 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx @@ -0,0 +1,27 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + + ); +} + +interface AnotherComponentProps { + property1: string; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution14.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution14.tsx new file mode 100644 index 00000000000..b9edcc8ab75 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution14.tsx @@ -0,0 +1,28 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + // Error extra property + + ); +} + +interface AnotherComponentProps { + property1: string; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution15.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution15.tsx new file mode 100644 index 00000000000..5ede01c0eab --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution15.tsx @@ -0,0 +1,29 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + + ); +} + +interface AnotherComponentProps { + property1: string; + AnotherProperty1: string; + property2: boolean; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} \ No newline at end of file From d36175b1e8741c1a31e3d2bc545dd8a1b2bc6210 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Fri, 5 May 2017 08:51:18 -0700 Subject: [PATCH 61/92] Remove some redundant code in createJsxAttributesTypeFromAttributesProperty --- src/compiler/checker.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 84ff54391de..b717a4d196c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13293,19 +13293,15 @@ namespace ts { if (spread !== emptyObjectType) { if (attributesArray.length > 0) { spread = getSpreadType(spread, createJsxAttributesType(attributes.symbol, attributesTable)); - attributesArray = []; - attributesTable = createMap(); } attributesArray = getPropertiesOfType(spread); } attributesTable = createMap(); - if (attributesArray) { - forEach(attributesArray, (attr) => { - if (!filter || filter(attr)) { - attributesTable.set(attr.name, attr); - } - }); + for (const attr of attributesArray) { + if (!filter || filter(attr)) { + attributesTable.set(attr.name, attr); + } } } From d94d4906471f9971a9a3f51239bedd92ed67c6c9 Mon Sep 17 00:00:00 2001 From: Yui T Date: Fri, 5 May 2017 10:05:50 -0700 Subject: [PATCH 62/92] Updates tests and baselines --- .../reference/checkJsxChildrenProperty12.js | 20 +++++- .../checkJsxChildrenProperty12.symbols | 35 ++++++++-- .../checkJsxChildrenProperty12.types | 26 +++++++- .../checkJsxChildrenProperty13.errors.txt | 33 ++++++++++ .../reference/checkJsxChildrenProperty13.js | 66 +++++++++++++++++++ .../tsxSpreadAttributesResolution13.js | 24 +++++-- .../tsxSpreadAttributesResolution13.symbols | 35 ++++++---- .../tsxSpreadAttributesResolution13.types | 31 ++++++--- ...tsxSpreadAttributesResolution16.errors.txt | 35 ++++++++++ .../tsxSpreadAttributesResolution16.js | 41 ++++++++++++ .../jsx/checkJsxChildrenProperty12.tsx | 10 ++- .../jsx/checkJsxChildrenProperty13.tsx | 31 +++++++++ .../jsx/tsxSpreadAttributesResolution13.tsx | 14 ++-- .../jsx/tsxSpreadAttributesResolution16.tsx | 30 +++++++++ 14 files changed, 391 insertions(+), 40 deletions(-) create mode 100644 tests/baselines/reference/checkJsxChildrenProperty13.errors.txt create mode 100644 tests/baselines/reference/checkJsxChildrenProperty13.js create mode 100644 tests/baselines/reference/tsxSpreadAttributesResolution16.errors.txt create mode 100644 tests/baselines/reference/tsxSpreadAttributesResolution16.js create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty13.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution16.tsx diff --git a/tests/baselines/reference/checkJsxChildrenProperty12.js b/tests/baselines/reference/checkJsxChildrenProperty12.js index fcb3edf423d..0030d87483f 100644 --- a/tests/baselines/reference/checkJsxChildrenProperty12.js +++ b/tests/baselines/reference/checkJsxChildrenProperty12.js @@ -9,7 +9,15 @@ interface ButtonProp { class Button extends React.Component { render() { - return + let condition: boolean; + if (condition) { + return + } + else { + return ( +
Hello World
+
); + } } } @@ -44,7 +52,15 @@ var Button = (function (_super) { return _super !== null && _super.apply(this, arguments) || this; } Button.prototype.render = function () { - return ; + var condition; + if (condition) { + return ; + } + else { + return ( +
Hello World
+
); + } }; return Button; }(React.Component)); diff --git a/tests/baselines/reference/checkJsxChildrenProperty12.symbols b/tests/baselines/reference/checkJsxChildrenProperty12.symbols index 7b45ad96cf4..ccfb4b18875 100644 --- a/tests/baselines/reference/checkJsxChildrenProperty12.symbols +++ b/tests/baselines/reference/checkJsxChildrenProperty12.symbols @@ -26,30 +26,51 @@ class Button extends React.Component { render() { >render : Symbol(Button.render, Decl(file.tsx, 8, 55)) - return ->InnerButton : Symbol(InnerButton, Decl(file.tsx, 16, 1)) + let condition: boolean; +>condition : Symbol(condition, Decl(file.tsx, 10, 5)) + + if (condition) { +>condition : Symbol(condition, Decl(file.tsx, 10, 5)) + + return +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 24, 1)) >this.props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) >this : Symbol(Button, Decl(file.tsx, 6, 1)) >props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) + } + else { + return ( +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 24, 1)) +>this.props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) +>this : Symbol(Button, Decl(file.tsx, 6, 1)) +>props : Symbol(React.Component.props, Decl(react.d.ts, 166, 37)) + +
Hello World
+>div : Symbol(JSX.IntrinsicElements.div, Decl(react.d.ts, 2399, 45)) +>div : Symbol(JSX.IntrinsicElements.div, Decl(react.d.ts, 2399, 45)) + +
); +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 24, 1)) + } } } interface InnerButtonProp { ->InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 12, 1)) +>InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 20, 1)) a: number ->a : Symbol(InnerButtonProp.a, Decl(file.tsx, 14, 27)) +>a : Symbol(InnerButtonProp.a, Decl(file.tsx, 22, 27)) } class InnerButton extends React.Component { ->InnerButton : Symbol(InnerButton, Decl(file.tsx, 16, 1)) +>InnerButton : Symbol(InnerButton, Decl(file.tsx, 24, 1)) >React.Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) >React : Symbol(React, Decl(file.tsx, 0, 0)) >Component : Symbol(React.Component, Decl(react.d.ts, 158, 55)) ->InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 12, 1)) +>InnerButtonProp : Symbol(InnerButtonProp, Decl(file.tsx, 20, 1)) render() { ->render : Symbol(InnerButton.render, Decl(file.tsx, 18, 65)) +>render : Symbol(InnerButton.render, Decl(file.tsx, 26, 65)) return (); >button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 2385, 43)) diff --git a/tests/baselines/reference/checkJsxChildrenProperty12.types b/tests/baselines/reference/checkJsxChildrenProperty12.types index cc2d2300828..93a7d0f9be1 100644 --- a/tests/baselines/reference/checkJsxChildrenProperty12.types +++ b/tests/baselines/reference/checkJsxChildrenProperty12.types @@ -26,12 +26,36 @@ class Button extends React.Component { render() { >render : () => JSX.Element - return + let condition: boolean; +>condition : boolean + + if (condition) { +>condition : boolean + + return > : JSX.Element >InnerButton : typeof InnerButton >this.props : ButtonProp & { children?: React.ReactNode; } >this : this >props : ButtonProp & { children?: React.ReactNode; } + } + else { + return ( +>(
Hello World
) : JSX.Element +>
Hello World
: JSX.Element +>InnerButton : typeof InnerButton +>this.props : ButtonProp & { children?: React.ReactNode; } +>this : this +>props : ButtonProp & { children?: React.ReactNode; } + +
Hello World
+>
Hello World
: JSX.Element +>div : any +>div : any + +
); +>InnerButton : typeof InnerButton + } } } diff --git a/tests/baselines/reference/checkJsxChildrenProperty13.errors.txt b/tests/baselines/reference/checkJsxChildrenProperty13.errors.txt new file mode 100644 index 00000000000..c926980cab1 --- /dev/null +++ b/tests/baselines/reference/checkJsxChildrenProperty13.errors.txt @@ -0,0 +1,33 @@ +tests/cases/conformance/jsx/file.tsx(12,30): error TS2710: 'children' are specified twice. The attribute named 'children' will be overwritten. + + +==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== + import React = require('react'); + + interface ButtonProp { + a: number, + b: string, + children: Button; + } + + class Button extends React.Component { + render() { + // Error children are specified twice + return ( + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2710: 'children' are specified twice. The attribute named 'children' will be overwritten. +
Hello World
+
); + } + } + + interface InnerButtonProp { + a: number + } + + class InnerButton extends React.Component { + render() { + return (); + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/checkJsxChildrenProperty13.js b/tests/baselines/reference/checkJsxChildrenProperty13.js new file mode 100644 index 00000000000..8947e6b211f --- /dev/null +++ b/tests/baselines/reference/checkJsxChildrenProperty13.js @@ -0,0 +1,66 @@ +//// [file.tsx] +import React = require('react'); + +interface ButtonProp { + a: number, + b: string, + children: Button; +} + +class Button extends React.Component { + render() { + // Error children are specified twice + return ( +
Hello World
+
); + } +} + +interface InnerButtonProp { + a: number +} + +class InnerButton extends React.Component { + render() { + return (); + } +} + + +//// [file.jsx] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +exports.__esModule = true; +var React = require("react"); +var Button = (function (_super) { + __extends(Button, _super); + function Button() { + return _super !== null && _super.apply(this, arguments) || this; + } + Button.prototype.render = function () { + // Error children are specified twice + return ( +
Hello World
+
); + }; + return Button; +}(React.Component)); +var InnerButton = (function (_super) { + __extends(InnerButton, _super); + function InnerButton() { + return _super !== null && _super.apply(this, arguments) || this; + } + InnerButton.prototype.render = function () { + return (); + }; + return InnerButton; +}(React.Component)); diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.js b/tests/baselines/reference/tsxSpreadAttributesResolution13.js index f1626414397..8227f3d6399 100644 --- a/tests/baselines/reference/tsxSpreadAttributesResolution13.js +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.js @@ -7,16 +7,22 @@ interface ComponentProps { } export default function Component(props: ComponentProps) { - return ( - - ); + let condition1: boolean; + if (condition1) { + return ( + + ); + } + else { + return (); + } } interface AnotherComponentProps { property1: string; } -function AnotherComponent({ property1 }: AnotherComponentProps) { +function ChildComponent({ property1 }: AnotherComponentProps) { return ( {property1} ); @@ -27,10 +33,16 @@ function AnotherComponent({ property1 }: AnotherComponentProps) { exports.__esModule = true; var React = require("react"); function Component(props) { - return (); + var condition1; + if (condition1) { + return (); + } + else { + return (); + } } exports["default"] = Component; -function AnotherComponent(_a) { +function ChildComponent(_a) { var property1 = _a.property1; return ({property1}); } diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols b/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols index 1923c39c85a..2e146225792 100644 --- a/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.symbols @@ -17,30 +17,43 @@ export default function Component(props: ComponentProps) { >props : Symbol(props, Decl(file.tsx, 7, 34)) >ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 0, 32)) - return ( - ->AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 15, 1)) + let condition1: boolean; +>condition1 : Symbol(condition1, Decl(file.tsx, 8, 7)) + + if (condition1) { +>condition1 : Symbol(condition1, Decl(file.tsx, 8, 7)) + + return ( + +>ChildComponent : Symbol(ChildComponent, Decl(file.tsx, 21, 1)) >props : Symbol(props, Decl(file.tsx, 7, 34)) - ); + ); + } + else { + return (); +>ChildComponent : Symbol(ChildComponent, Decl(file.tsx, 21, 1)) +>props : Symbol(props, Decl(file.tsx, 7, 34)) +>property1 : Symbol(property1, Decl(file.tsx, 15, 42)) + } } interface AnotherComponentProps { ->AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 17, 1)) property1: string; ->property1 : Symbol(AnotherComponentProps.property1, Decl(file.tsx, 13, 33)) +>property1 : Symbol(AnotherComponentProps.property1, Decl(file.tsx, 19, 33)) } -function AnotherComponent({ property1 }: AnotherComponentProps) { ->AnotherComponent : Symbol(AnotherComponent, Decl(file.tsx, 15, 1)) ->property1 : Symbol(property1, Decl(file.tsx, 17, 27)) ->AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 11, 1)) +function ChildComponent({ property1 }: AnotherComponentProps) { +>ChildComponent : Symbol(ChildComponent, Decl(file.tsx, 21, 1)) +>property1 : Symbol(property1, Decl(file.tsx, 23, 25)) +>AnotherComponentProps : Symbol(AnotherComponentProps, Decl(file.tsx, 17, 1)) return ( {property1} >span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) ->property1 : Symbol(property1, Decl(file.tsx, 17, 27)) +>property1 : Symbol(property1, Decl(file.tsx, 23, 25)) >span : Symbol(JSX.IntrinsicElements.span, Decl(react.d.ts, 2460, 51)) ); diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution13.types b/tests/baselines/reference/tsxSpreadAttributesResolution13.types index 0c231dddece..5b5ada68613 100644 --- a/tests/baselines/reference/tsxSpreadAttributesResolution13.types +++ b/tests/baselines/reference/tsxSpreadAttributesResolution13.types @@ -17,15 +17,30 @@ export default function Component(props: ComponentProps) { >props : ComponentProps >ComponentProps : ComponentProps - return ( ->( ) : JSX.Element + let condition1: boolean; +>condition1 : boolean - -> : JSX.Element ->AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element + if (condition1) { +>condition1 : boolean + + return ( +>( ) : JSX.Element + + +> : JSX.Element +>ChildComponent : ({property1}: AnotherComponentProps) => JSX.Element >props : ComponentProps - ); + ); + } + else { + return (); +>() : JSX.Element +> : JSX.Element +>ChildComponent : ({property1}: AnotherComponentProps) => JSX.Element +>props : ComponentProps +>property1 : string + } } interface AnotherComponentProps { @@ -35,8 +50,8 @@ interface AnotherComponentProps { >property1 : string } -function AnotherComponent({ property1 }: AnotherComponentProps) { ->AnotherComponent : ({property1}: AnotherComponentProps) => JSX.Element +function ChildComponent({ property1 }: AnotherComponentProps) { +>ChildComponent : ({property1}: AnotherComponentProps) => JSX.Element >property1 : string >AnotherComponentProps : AnotherComponentProps diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution16.errors.txt b/tests/baselines/reference/tsxSpreadAttributesResolution16.errors.txt new file mode 100644 index 00000000000..ddfb9c1c6cf --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution16.errors.txt @@ -0,0 +1,35 @@ +tests/cases/conformance/jsx/file.tsx(11,27): error TS2322: Type '{ property1: string; property2: number; }' is not assignable to type 'IntrinsicAttributes & AnotherComponentProps'. + Type '{ property1: string; property2: number; }' is not assignable to type 'AnotherComponentProps'. + Property 'AnotherProperty1' is missing in type '{ property1: string; property2: number; }'. + + +==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== + import React = require('react'); + + interface ComponentProps { + property1: string; + property2: number; + } + + export default function Component(props: ComponentProps) { + return ( + // Error: missing property + + ~~~~~~~~~~ +!!! error TS2322: Type '{ property1: string; property2: number; }' is not assignable to type 'IntrinsicAttributes & AnotherComponentProps'. +!!! error TS2322: Type '{ property1: string; property2: number; }' is not assignable to type 'AnotherComponentProps'. +!!! error TS2322: Property 'AnotherProperty1' is missing in type '{ property1: string; property2: number; }'. + ); + } + + interface AnotherComponentProps { + property1: string; + AnotherProperty1: string; + property2: boolean; + } + + function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); + } \ No newline at end of file diff --git a/tests/baselines/reference/tsxSpreadAttributesResolution16.js b/tests/baselines/reference/tsxSpreadAttributesResolution16.js new file mode 100644 index 00000000000..ad0d4b01885 --- /dev/null +++ b/tests/baselines/reference/tsxSpreadAttributesResolution16.js @@ -0,0 +1,41 @@ +//// [file.tsx] +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + // Error: missing property + + ); +} + +interface AnotherComponentProps { + property1: string; + AnotherProperty1: string; + property2: boolean; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} + +//// [file.jsx] +"use strict"; +exports.__esModule = true; +var React = require("react"); +function Component(props) { + return ( + // Error: missing property + ); +} +exports["default"] = Component; +function AnotherComponent(_a) { + var property1 = _a.property1; + return ({property1}); +} diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx index ba42e9e83d4..e49b196b8f8 100644 --- a/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty12.tsx @@ -13,7 +13,15 @@ interface ButtonProp { class Button extends React.Component { render() { - return + let condition: boolean; + if (condition) { + return + } + else { + return ( +
Hello World
+
); + } } } diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty13.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty13.tsx new file mode 100644 index 00000000000..1584bf43159 --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty13.tsx @@ -0,0 +1,31 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ButtonProp { + a: number, + b: string, + children: Button; +} + +class Button extends React.Component { + render() { + // Error children are specified twice + return ( +
Hello World
+
); + } +} + +interface InnerButtonProp { + a: number +} + +class InnerButton extends React.Component { + render() { + return (); + } +} diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx index dda315b0826..b665654514c 100644 --- a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution13.tsx @@ -11,16 +11,22 @@ interface ComponentProps { } export default function Component(props: ComponentProps) { - return ( - - ); + let condition1: boolean; + if (condition1) { + return ( + + ); + } + else { + return (); + } } interface AnotherComponentProps { property1: string; } -function AnotherComponent({ property1 }: AnotherComponentProps) { +function ChildComponent({ property1 }: AnotherComponentProps) { return ( {property1} ); diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution16.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution16.tsx new file mode 100644 index 00000000000..98616661857 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution16.tsx @@ -0,0 +1,30 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ComponentProps { + property1: string; + property2: number; +} + +export default function Component(props: ComponentProps) { + return ( + // Error: missing property + + ); +} + +interface AnotherComponentProps { + property1: string; + AnotherProperty1: string; + property2: boolean; +} + +function AnotherComponent({ property1 }: AnotherComponentProps) { + return ( + {property1} + ); +} \ No newline at end of file From 573040f0cfa713929bfa1fe84f4fd2a81cc82658 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 5 May 2017 13:47:28 -0700 Subject: [PATCH 63/92] Convert `Declaration` to union, not type hierarchy --- src/compiler/binder.ts | 6 +- src/compiler/checker.ts | 20 +-- src/compiler/transformers/es2015.ts | 2 +- src/compiler/types.ts | 182 ++++++++++++++++++++++------ src/compiler/utilities.ts | 67 +++++----- 5 files changed, 190 insertions(+), 87 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 38cb93bff7e..8506378e216 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -304,7 +304,7 @@ namespace ts { } function getDisplayName(node: Declaration): string { - return (node as RealDeclaration).name ? declarationNameToString((node as RealDeclaration).name) : getDeclarationName(node); + return (node as DeclarationBase).name ? declarationNameToString((node as DeclarationBase).name) : getDeclarationName(node); } /** @@ -367,8 +367,8 @@ namespace ts { symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name)); } else { - if ((node as RealDeclaration).name) { - (node as RealDeclaration).name.parent = node; + if ((node as DeclarationBase).name) { + (node as DeclarationBase).name.parent = node; } // Report errors every position with duplicate declaration diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8979510461e..05af363fb8e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3621,7 +3621,7 @@ namespace ts { }); } - function isDeclarationVisible(node: Declaration): boolean { + function isDeclarationVisible(node: Node): boolean { if (node) { const links = getNodeLinks(node); if (links.isVisible === undefined) { @@ -3635,10 +3635,10 @@ namespace ts { function determineIfDeclarationIsVisible() { switch (node.kind) { case SyntaxKind.BindingElement: - return isDeclarationVisible(node.parent.parent); + return isDeclarationVisible(node.parent.parent); case SyntaxKind.VariableDeclaration: - if (isBindingPattern(node.name) && - !(node.name).elements.length) { + const declaration = node as VariableDeclaration; + if (isBindingPattern(declaration.name) && !declaration.name.elements.length) { // If the binding pattern is empty, this variable declaration is not visible return false; } @@ -3661,7 +3661,7 @@ namespace ts { return isGlobalSourceFile(parent); } // Exported members/ambient module elements (exception import declaration) are visible if parent is visible - return isDeclarationVisible(parent); + return isDeclarationVisible(parent); case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertySignature: @@ -3691,7 +3691,7 @@ namespace ts { case SyntaxKind.UnionType: case SyntaxKind.IntersectionType: case SyntaxKind.ParenthesizedType: - return isDeclarationVisible(node.parent); + return isDeclarationVisible(node.parent); // Default binding, import specifier and namespace import is visible // only on demand so by default it is not visible @@ -6236,8 +6236,8 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return (node).name.kind === SyntaxKind.ComputedPropertyName - && traverse((node).name); + return (node).name.kind === SyntaxKind.ComputedPropertyName + && traverse((node).name); default: return !nodeStartsNewLexicalEnvironment(node) && !isPartOfTypeNode(node) && forEachChild(node, traverse); @@ -21917,7 +21917,7 @@ namespace ts { function isTypeDeclarationName(name: Node): boolean { return name.kind === SyntaxKind.Identifier && isTypeDeclaration(name.parent) && - (name.parent).name === name; + (name.parent).name === name; } function isTypeDeclaration(node: Node): boolean { @@ -22545,7 +22545,7 @@ namespace ts { // Return true if the given node is a declaration of a nested block scoped entity with a name that either hides an // existing name or might hide a name when compiled downlevel - function isDeclarationWithCollidingName(node: Declaration): boolean { + function isDeclarationWithCollidingName(node: Node): boolean { node = getParseTreeNode(node, isDeclaration); if (node) { const symbol = getSymbolOfNode(node); diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 188da04b36c..4165b0679e1 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -3748,7 +3748,7 @@ namespace ts { case SyntaxKind.ClassDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.VariableDeclaration: - return (parent).name === node + return (parent).name === node && resolver.isDeclarationWithCollidingName(parent); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 51e9d6717ee..de71fbfdabe 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -603,15 +603,75 @@ namespace ts { export type DeclarationName = Identifier | StringLiteral | NumericLiteral | ComputedPropertyName | BindingPattern; - export interface RealDeclaration extends Node { + export interface DeclarationBase extends Node { _declarationBrand: any; name?: DeclarationName; } - // Binary expressions can be declarations if they are 'exports.foo = bar' expressions in JS files - export type Declaration = RealDeclaration | BinaryExpression; + export type Declaration = + | ArrowFunction + // Binary expressions can be declarations if they are 'exports.foo = bar' expressions in JS files + | BinaryExpression + | BindingElement + | CallExpression + | CallSignatureDeclaration + | ClassDeclaration + | ClassElement + | ClassExpression + | ClassLikeDeclaration + | ConstructSignatureDeclaration + | ConstructorDeclaration + | ConstructorTypeNode + | EnumDeclaration + | EnumMember + | ExportAssignment + | ExportDeclaration + | ExportSpecifier + | FunctionDeclaration + | FunctionExpression + | FunctionTypeNode + | GetAccessorDeclaration + | ImportClause + | ImportEqualsDeclaration + | ImportSpecifier + | IndexSignatureDeclaration + | InterfaceDeclaration + | JSDocFunctionType + | JSDocNamespaceDeclaration + | JSDocPropertyTag + | JSDocTypedefTag + | JsxAttribute + | JsxAttributes + | JsxSpreadAttribute + | MappedTypeNode + | MethodDeclaration + | MethodSignature + | MissingDeclaration + | ModuleDeclaration + | NamespaceDeclaration + | NamespaceExportDeclaration + | NamespaceImport + | NewExpression + | ObjectLiteralExpression + | ParameterDeclaration + | PropertyAccessExpression + | PropertyAssignment + | PropertyDeclaration + | PropertySignature + | SemicolonClassElement + | SetAccessorDeclaration + | ShorthandPropertyAssignment + | SignatureDeclaration + | SourceFile + | SpreadAssignment + | TypeAliasDeclaration + | TypeElement + | TypeLiteralNode + | TypeParameterDeclaration + | VariableDeclaration + | VariableLikeDeclaration; - export interface DeclarationStatement extends RealDeclaration, Statement { + export interface DeclarationStatement extends DeclarationBase, Statement { name?: Identifier | StringLiteral | NumericLiteral; } @@ -625,7 +685,7 @@ namespace ts { expression: LeftHandSideExpression; } - export interface TypeParameterDeclaration extends RealDeclaration { + export interface TypeParameterDeclaration extends DeclarationBase { kind: SyntaxKind.TypeParameter; parent?: DeclarationWithTypeParameters; name: Identifier; @@ -636,7 +696,23 @@ namespace ts { expression?: Expression; } - export interface SignatureDeclaration extends RealDeclaration { + export interface SignatureDeclaration extends DeclarationBase { + kind: + | SyntaxKind.CallSignature + | SyntaxKind.ConstructSignature + | SyntaxKind.ConstructorType + | SyntaxKind.MethodSignature + | SyntaxKind.IndexSignature + | SyntaxKind.FunctionType + | SyntaxKind.JSDocFunctionType + | SyntaxKind.FunctionDeclaration + | SyntaxKind.MethodDeclaration + | SyntaxKind.GetAccessor + | SyntaxKind.SetAccessor + | SyntaxKind.Constructor + | SyntaxKind.ArrowFunction + | SyntaxKind.FunctionExpression + name?: PropertyName; typeParameters?: NodeArray; parameters: NodeArray; @@ -653,7 +729,7 @@ namespace ts { export type BindingName = Identifier | BindingPattern; - export interface VariableDeclaration extends RealDeclaration { + export interface VariableDeclaration extends DeclarationBase { kind: SyntaxKind.VariableDeclaration; parent?: VariableDeclarationList | CatchClause; name: BindingName; // Declared variable name @@ -667,7 +743,7 @@ namespace ts { declarations: NodeArray; } - export interface ParameterDeclaration extends RealDeclaration { + export interface ParameterDeclaration extends DeclarationBase { kind: SyntaxKind.Parameter; parent?: SignatureDeclaration; dotDotDotToken?: DotDotDotToken; // Present on rest parameter @@ -677,7 +753,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface BindingElement extends RealDeclaration { + export interface BindingElement extends DeclarationBase { kind: SyntaxKind.BindingElement; parent?: BindingPattern; propertyName?: PropertyName; // Binding property name (in object binding pattern) @@ -702,7 +778,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface ObjectLiteralElement extends RealDeclaration { + export interface ObjectLiteralElement extends DeclarationBase { _objectLiteralBrandBrand: any; name?: PropertyName; } @@ -737,16 +813,24 @@ namespace ts { expression: Expression; } - // SyntaxKind.VariableDeclaration - // SyntaxKind.Parameter - // SyntaxKind.BindingElement - // SyntaxKind.Property - // SyntaxKind.PropertyAssignment - // SyntaxKind.JsxAttribute - // SyntaxKind.ShorthandPropertyAssignment - // SyntaxKind.EnumMember - // SyntaxKind.JSDocPropertyTag - export interface VariableLikeDeclaration extends RealDeclaration { + /** + * There aren't any explicit subtypes of VariableLikeDeclaration; + * it's just structurally relatable to a number of types. + * (Maybe it should be an intersection of the below types.) + */ + export interface VariableLikeDeclaration extends DeclarationBase { + kind: + | SyntaxKind.VariableDeclaration + | SyntaxKind.Parameter + | SyntaxKind.BindingElement + | SyntaxKind.PropertyAssignment + | SyntaxKind.PropertyDeclaration + | SyntaxKind.PropertySignature + | SyntaxKind.JsxAttribute + | SyntaxKind.ShorthandPropertyAssignment + | SyntaxKind.EnumMember + | SyntaxKind.JSDocPropertyTag + | SyntaxKind.JSDocRecordMember; propertyName?: PropertyName; dotDotDotToken?: DotDotDotToken; name: DeclarationName; @@ -755,10 +839,6 @@ namespace ts { initializer?: Expression; } - export interface PropertyLikeDeclaration extends RealDeclaration { - name: PropertyName; - } - export interface ObjectBindingPattern extends Node { kind: SyntaxKind.ObjectBindingPattern; parent?: VariableDeclaration | ParameterDeclaration | BindingElement; @@ -904,7 +984,7 @@ namespace ts { } // A TypeLiteral is the declaration node for an anonymous symbol. - export interface TypeLiteralNode extends TypeNode, RealDeclaration { + export interface TypeLiteralNode extends TypeNode, DeclarationBase { kind: SyntaxKind.TypeLiteral; members: NodeArray; } @@ -948,7 +1028,7 @@ namespace ts { indexType: TypeNode; } - export interface MappedTypeNode extends TypeNode, RealDeclaration { + export interface MappedTypeNode extends TypeNode, DeclarationBase { kind: SyntaxKind.MappedType; parent?: TypeAliasDeclaration; readonlyToken?: ReadonlyToken; @@ -1405,7 +1485,7 @@ namespace ts { * JSXAttribute or JSXSpreadAttribute. ObjectLiteralExpression, on the other hand, can only have properties of type * ObjectLiteralElement (e.g. PropertyAssignment, ShorthandPropertyAssignment etc.) */ - export interface ObjectLiteralExpressionBase extends PrimaryExpression, RealDeclaration { + export interface ObjectLiteralExpressionBase extends PrimaryExpression, DeclarationBase { properties: NodeArray; } @@ -1419,7 +1499,7 @@ namespace ts { export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression; export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression; - export interface PropertyAccessExpression extends MemberExpression, RealDeclaration { + export interface PropertyAccessExpression extends MemberExpression, DeclarationBase { kind: SyntaxKind.PropertyAccessExpression; expression: LeftHandSideExpression; name: Identifier; @@ -1451,7 +1531,7 @@ namespace ts { | SuperElementAccessExpression ; - export interface CallExpression extends LeftHandSideExpression, RealDeclaration { + export interface CallExpression extends LeftHandSideExpression, DeclarationBase { kind: SyntaxKind.CallExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1470,7 +1550,7 @@ namespace ts { typeArguments?: NodeArray; } - export interface NewExpression extends PrimaryExpression, RealDeclaration { + export interface NewExpression extends PrimaryExpression, DeclarationBase { kind: SyntaxKind.NewExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1528,6 +1608,7 @@ namespace ts { export type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; export interface JsxAttributes extends ObjectLiteralExpressionBase { + kind: SyntaxKind.JsxAttributes; parent?: JsxOpeningLikeElement; } @@ -1764,7 +1845,10 @@ namespace ts { export type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration; - export interface ClassLikeDeclaration extends RealDeclaration { + export interface ClassLikeDeclaration extends DeclarationBase { + kind: + | SyntaxKind.ClassDeclaration + | SyntaxKind.ClassExpression; name?: Identifier; typeParameters?: NodeArray; heritageClauses?: NodeArray; @@ -1780,12 +1864,30 @@ namespace ts { kind: SyntaxKind.ClassExpression; } - export interface ClassElement extends RealDeclaration { + export interface ClassElement extends DeclarationBase { + kind: + | SyntaxKind.PropertyDeclaration + | SyntaxKind.MethodDeclaration + | SyntaxKind.Constructor + | SyntaxKind.SemicolonClassElement + | SyntaxKind.GetAccessor + | SyntaxKind.SetAccessor + | SyntaxKind.IndexSignature + | SyntaxKind.MissingDeclaration; _classElementBrand: any; name?: PropertyName; } - export interface TypeElement extends RealDeclaration { + export interface TypeElement extends DeclarationBase { + kind: + | SyntaxKind.CallSignature + | SyntaxKind.ConstructSignature + | SyntaxKind.PropertySignature + | SyntaxKind.MethodSignature + | SyntaxKind.IndexSignature + | SyntaxKind.MissingDeclaration + | SyntaxKind.JSDocPropertyTag + | SyntaxKind.JSDocRecordMember; _typeElementBrand: any; name?: PropertyName; questionToken?: QuestionToken; @@ -1813,7 +1915,7 @@ namespace ts { type: TypeNode; } - export interface EnumMember extends RealDeclaration { + export interface EnumMember extends DeclarationBase { kind: SyntaxKind.EnumMember; parent?: EnumDeclaration; // This does include ComputedPropertyName, but the parser will give an error @@ -1902,14 +2004,14 @@ namespace ts { // import d, * as ns from "mod" => name = d, namedBinding: NamespaceImport = { name: ns } // import { a, b as x } from "mod" => name = undefined, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} // import d, { a, b as x } from "mod" => name = d, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} - export interface ImportClause extends RealDeclaration { + export interface ImportClause extends DeclarationBase { kind: SyntaxKind.ImportClause; parent?: ImportDeclaration; name?: Identifier; // Default binding namedBindings?: NamedImportBindings; } - export interface NamespaceImport extends RealDeclaration { + export interface NamespaceImport extends DeclarationBase { kind: SyntaxKind.NamespaceImport; parent?: ImportClause; name: Identifier; @@ -1942,14 +2044,14 @@ namespace ts { export type NamedImportsOrExports = NamedImports | NamedExports; - export interface ImportSpecifier extends RealDeclaration { + export interface ImportSpecifier extends DeclarationBase { kind: SyntaxKind.ImportSpecifier; parent?: NamedImports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) name: Identifier; // Declared name } - export interface ExportSpecifier extends RealDeclaration { + export interface ExportSpecifier extends DeclarationBase { kind: SyntaxKind.ExportSpecifier; parent?: NamedExports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) @@ -2115,7 +2217,7 @@ namespace ts { typeExpression: JSDocTypeExpression; } - export interface JSDocTypedefTag extends JSDocTag, RealDeclaration { + export interface JSDocTypedefTag extends JSDocTag, DeclarationBase { kind: SyntaxKind.JSDocTypedefTag; fullName?: JSDocNamespaceDeclaration | Identifier; name?: Identifier; @@ -2249,7 +2351,7 @@ namespace ts { // Source files are declarations when they are external modules. - export interface SourceFile extends RealDeclaration { + export interface SourceFile extends DeclarationBase { kind: SyntaxKind.SourceFile; statements: NodeArray; endOfFileToken: Token; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 5b1cbb849bc..e38f0ad331a 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -11,36 +11,6 @@ namespace ts { isTypeReferenceDirective?: boolean; } - export function getNameOfDeclaration(declaration: Declaration): DeclarationName { - if (!declaration) { - return undefined; - } - if (declaration.kind === SyntaxKind.BinaryExpression) { - const kind = getSpecialPropertyAssignmentKind(declaration as BinaryExpression); - const lhs = (declaration as BinaryExpression).left; - switch (kind) { - case SpecialPropertyAssignmentKind.None: - case SpecialPropertyAssignmentKind.ModuleExports: - return undefined; - case SpecialPropertyAssignmentKind.ExportsProperty: - if (lhs.kind === SyntaxKind.Identifier) { - return (lhs as PropertyAccessExpression).name; - } - else { - return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; - } - case SpecialPropertyAssignmentKind.ThisProperty: - case SpecialPropertyAssignmentKind.Property: - return (lhs as PropertyAccessExpression).name; - case SpecialPropertyAssignmentKind.PrototypeProperty: - return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; - } - } - else { - return declaration.name; - } - } - export function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration { const declarations = symbol.declarations; if (declarations) { @@ -596,7 +566,7 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.TypeAliasDeclaration: - errorNode = (node).name; + errorNode = (node).name; break; case SyntaxKind.ArrowFunction: return getErrorSpanForArrowFunction(sourceFile, node); @@ -1806,6 +1776,37 @@ namespace ts { return false; } + export function getNameOfDeclaration(declaration: Declaration): DeclarationName { + if (!declaration) { + return undefined; + } + if (declaration.kind === SyntaxKind.BinaryExpression) { + const kind = getSpecialPropertyAssignmentKind(declaration); + const lhs = (declaration as BinaryExpression).left; + switch (kind) { + case SpecialPropertyAssignmentKind.None: + case SpecialPropertyAssignmentKind.ModuleExports: + return undefined; + case SpecialPropertyAssignmentKind.ExportsProperty: + if (lhs.kind === SyntaxKind.Identifier) { + return (lhs as PropertyAccessExpression).name; + } + else { + return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; + } + case SpecialPropertyAssignmentKind.ThisProperty: + case SpecialPropertyAssignmentKind.Property: + return (lhs as PropertyAccessExpression).name; + case SpecialPropertyAssignmentKind.PrototypeProperty: + return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; + } + } + else { + return declaration.name; + } + } + + export function isLiteralComputedPropertyDeclarationName(node: Node) { return (node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral) && node.parent.kind === SyntaxKind.ComputedPropertyName && @@ -1826,7 +1827,7 @@ namespace ts { case SyntaxKind.PropertyAssignment: case SyntaxKind.PropertyAccessExpression: // Name in member declaration or property name in property access - return (parent).name === node; + return (parent).name === node; case SyntaxKind.QualifiedName: // Name on right hand side of dot in a type query if ((parent).right === node) { @@ -4101,7 +4102,7 @@ namespace ts { || kind === SyntaxKind.MergeDeclarationMarker; } - export function isDeclaration(node: Node): node is RealDeclaration { + export function isDeclaration(node: Node): node is DeclarationBase { return isDeclarationKind(node.kind); } From b39c319f0c4ee9b460ed51eba77e8c0958896c80 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 5 May 2017 13:48:45 -0700 Subject: [PATCH 64/92] Fix lint --- src/compiler/types.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index de71fbfdabe..043c8b9a0b1 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -711,7 +711,7 @@ namespace ts { | SyntaxKind.SetAccessor | SyntaxKind.Constructor | SyntaxKind.ArrowFunction - | SyntaxKind.FunctionExpression + | SyntaxKind.FunctionExpression; name?: PropertyName; typeParameters?: NodeArray; @@ -814,9 +814,8 @@ namespace ts { } /** - * There aren't any explicit subtypes of VariableLikeDeclaration; + * There aren't any explicit subtypes of VariableLikeDeclaration, * it's just structurally relatable to a number of types. - * (Maybe it should be an intersection of the below types.) */ export interface VariableLikeDeclaration extends DeclarationBase { kind: From 6a175321bf432f31490dd81fcc7fd0f7257c4baa Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 5 May 2017 15:09:54 -0700 Subject: [PATCH 65/92] Address comments: simplify, dedupe and clean up --- src/compiler/checker.ts | 24 ++++++++---------------- src/compiler/utilities.ts | 29 +++++++++++++++-------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 05af363fb8e..aea175ac8b1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18110,18 +18110,17 @@ namespace ts { forEach(overloads, o => { const deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags; - const name = getNameOfDeclaration(o); if (deviation & ModifierFlags.Export) { - error(name, Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); } else if (deviation & ModifierFlags.Ambient) { - error(name, Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); } else if (deviation & (ModifierFlags.Private | ModifierFlags.Protected)) { - error(name || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); + error(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); } else if (deviation & ModifierFlags.Abstract) { - error(name, Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + error(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); } }); } @@ -20317,19 +20316,12 @@ namespace ts { return; } - let errorNode: Node; - if (propDeclaration && propDeclaration.kind === SyntaxKind.BinaryExpression) { - const specialAssignmentKind = getSpecialPropertyAssignmentKind(propDeclaration as BinaryExpression); - if (specialAssignmentKind === SpecialPropertyAssignmentKind.Property || - specialAssignmentKind === SpecialPropertyAssignmentKind.PrototypeProperty || - specialAssignmentKind === SpecialPropertyAssignmentKind.ThisProperty) { - errorNode = propDeclaration; - } - } // perform property check if property or indexer is declared in 'type' - // this allows to rule out cases when both property and indexer are inherited from the base class + // this allows us to rule out cases when both property and indexer are inherited from the base class + let errorNode: Node; if (propDeclaration && - (getNameOfDeclaration(propDeclaration).kind === SyntaxKind.ComputedPropertyName || + (propDeclaration.kind === SyntaxKind.BinaryExpression || + getNameOfDeclaration(propDeclaration).kind === SyntaxKind.ComputedPropertyName || prop.parent === containingType.symbol)) { errorNode = propDeclaration; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index e38f0ad331a..7b92dbf68b5 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1784,21 +1784,21 @@ namespace ts { const kind = getSpecialPropertyAssignmentKind(declaration); const lhs = (declaration as BinaryExpression).left; switch (kind) { - case SpecialPropertyAssignmentKind.None: - case SpecialPropertyAssignmentKind.ModuleExports: - return undefined; - case SpecialPropertyAssignmentKind.ExportsProperty: - if (lhs.kind === SyntaxKind.Identifier) { + case SpecialPropertyAssignmentKind.None: + case SpecialPropertyAssignmentKind.ModuleExports: + return undefined; + case SpecialPropertyAssignmentKind.ExportsProperty: + if (lhs.kind === SyntaxKind.Identifier) { + return (lhs as PropertyAccessExpression).name; + } + else { + return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; + } + case SpecialPropertyAssignmentKind.ThisProperty: + case SpecialPropertyAssignmentKind.Property: return (lhs as PropertyAccessExpression).name; - } - else { + case SpecialPropertyAssignmentKind.PrototypeProperty: return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; - } - case SpecialPropertyAssignmentKind.ThisProperty: - case SpecialPropertyAssignmentKind.Property: - return (lhs as PropertyAccessExpression).name; - case SpecialPropertyAssignmentKind.PrototypeProperty: - return ((lhs as PropertyAccessExpression).expression as PropertyAccessExpression).name; } } else { @@ -2025,7 +2025,8 @@ namespace ts { * Symbol. */ export function hasDynamicName(declaration: Declaration): boolean { - return getNameOfDeclaration(declaration) && isDynamicName(getNameOfDeclaration(declaration)); + const name = getNameOfDeclaration(declaration); + return name && isDynamicName(name); } export function isDynamicName(name: DeclarationName): boolean { From 788b2a3dd7f082ed7efdad537400c88a314e2708 Mon Sep 17 00:00:00 2001 From: Yui T Date: Fri, 5 May 2017 16:36:02 -0700 Subject: [PATCH 66/92] Wip - remove freshness flag from jsx attributes --- src/compiler/checker.ts | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f3db3f22bf2..2d1aaedf0fc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13356,9 +13356,7 @@ namespace ts { */ function createJsxAttributesType(symbol: Symbol, attributesTable: Map) { const result = createAnonymousType(symbol, attributesTable, emptyArray, emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined); - // Spread object doesn't have freshness flag to allow excess attributes as it is very common for parent component to spread its "props" to other components in its render method. - const freshObjectLiteralFlag = spread !== emptyObjectType || compilerOptions.suppressExcessPropertyErrors ? 0 : TypeFlags.FreshLiteral; - result.flags |= TypeFlags.JsxAttributes | TypeFlags.ContainsObjectLiteral | freshObjectLiteralFlag; + result.flags |= TypeFlags.JsxAttributes | TypeFlags.ContainsObjectLiteral; result.objectFlags |= ObjectFlags.ObjectLiteral; return result; } @@ -13877,7 +13875,30 @@ namespace ts { checkJsxAttributesAssignableToTagNameAttributes(node); } - /** + // Check if a property with the given name is known anywhere in the given type. In an object type, a property + // is considered known if the object type is empty and the check is for assignability, if the object type has + // index signatures, or if the property is actually declared in the object type. In a union or intersection + // type, a property is considered known if it is known in any constituent type. + function isKnownProperty(type: Type, name: string, isComparingJsxAttributes: boolean): boolean { + if (type.flags & TypeFlags.Object) { + const resolved = resolveStructuredTypeMembers(type); + if (resolved.stringIndexInfo || resolved.numberIndexInfo && isNumericLiteralName(name) || + getPropertyOfType(type, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { + // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known. + return true; + } + } + else if (type.flags & TypeFlags.UnionOrIntersection) { + for (const t of (type).types) { + if (isKnownProperty(t, name, isComparingJsxAttributes)) { + return true; + } + } + } + return false; + } + + /** * Check whether the given attributes of JSX opening-like element is assignable to the tagName attributes. * Get the attributes type of the opening-like element through resolving the tagName, "target attributes" * Check assignablity between given attributes property, "source attributes", and the "target attributes" @@ -13910,12 +13931,12 @@ namespace ts { } else { const isSourceAttributeTypeAssignableToTarget = checkTypeAssignableTo(sourceAttributesType, targetAttributesType, openingLikeElement.attributes.properties.length > 0 ? openingLikeElement.attributes : openingLikeElement); - // If sourceAttributesType has spread (e.g the type doesn't have freshness flag) after we check for assignability, we will do another pass to check that + // After we check for assignability, we will do another pass to check that // all explicitly specified attributes have correct name corresponding with target (as those will be assignable as spread type allows excess properties) // Note: if the type of these explicitly specified attributes do not match it will be an error during above assignability check. - if (isSourceAttributeTypeAssignableToTarget && sourceAttributesType !== anyType && !(sourceAttributesType.flags & TypeFlags.FreshLiteral)) { + if (isSourceAttributeTypeAssignableToTarget && !isTypeAny(sourceAttributesType) && !isTypeAny(targetAttributesType)) { for (const attribute of openingLikeElement.attributes.properties) { - if (isJsxAttribute(attribute) && !getPropertyOfType(targetAttributesType, attribute.name.text)) { + if (isJsxAttribute(attribute) && !isKnownProperty(targetAttributesType, attribute.name.text, /*isComparingJsxAttributes*/ true)) { error(attribute, Diagnostics.Property_0_does_not_exist_on_type_1, attribute.name.text, typeToString(targetAttributesType)); } } From ada4b3d4d85e7d7597fcaec4e8ac9107aaa06afb Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 5 May 2017 17:38:23 -0700 Subject: [PATCH 67/92] Fix var emit order for converted loops --- src/compiler/transformers/es2015.ts | 3 +- .../baselines/reference/capturedVarInLoop.js | 17 +++++++++++ .../reference/capturedVarInLoop.symbols | 22 ++++++++++++++ .../reference/capturedVarInLoop.types | 30 +++++++++++++++++++ tests/cases/compiler/capturedVarInLoop.ts | 6 ++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/capturedVarInLoop.js create mode 100644 tests/baselines/reference/capturedVarInLoop.symbols create mode 100644 tests/baselines/reference/capturedVarInLoop.types create mode 100644 tests/cases/compiler/capturedVarInLoop.ts diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 734fbcaeb16..be01d943412 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -2009,13 +2009,14 @@ namespace ts { } else { assignment = createBinary(decl.name, SyntaxKind.EqualsToken, visitNode(decl.initializer, visitor, isExpression)); + setTextRange(assignment, decl); } assignments = append(assignments, assignment); } } if (assignments) { - updated = setTextRange(createStatement(reduceLeft(assignments, (acc, v) => createBinary(v, SyntaxKind.CommaToken, acc))), node); + updated = setTextRange(createStatement(inlineExpressions(assignments)), node); } else { // none of declarations has initializer - the entire variable statement can be deleted diff --git a/tests/baselines/reference/capturedVarInLoop.js b/tests/baselines/reference/capturedVarInLoop.js new file mode 100644 index 00000000000..303c18eda2d --- /dev/null +++ b/tests/baselines/reference/capturedVarInLoop.js @@ -0,0 +1,17 @@ +//// [capturedVarInLoop.ts] +for (var i = 0; i < 10; i++) { + var str = 'x', len = str.length; + let lambda1 = (y) => { }; + let lambda2 = () => lambda1(len); +} + +//// [capturedVarInLoop.js] +var _loop_1 = function () { + str = 'x', len = str.length; + var lambda1 = function (y) { }; + var lambda2 = function () { return lambda1(len); }; +}; +var str, len; +for (var i = 0; i < 10; i++) { + _loop_1(); +} diff --git a/tests/baselines/reference/capturedVarInLoop.symbols b/tests/baselines/reference/capturedVarInLoop.symbols new file mode 100644 index 00000000000..9f218154fd8 --- /dev/null +++ b/tests/baselines/reference/capturedVarInLoop.symbols @@ -0,0 +1,22 @@ +=== tests/cases/compiler/capturedVarInLoop.ts === +for (var i = 0; i < 10; i++) { +>i : Symbol(i, Decl(capturedVarInLoop.ts, 0, 8)) +>i : Symbol(i, Decl(capturedVarInLoop.ts, 0, 8)) +>i : Symbol(i, Decl(capturedVarInLoop.ts, 0, 8)) + + var str = 'x', len = str.length; +>str : Symbol(str, Decl(capturedVarInLoop.ts, 1, 7)) +>len : Symbol(len, Decl(capturedVarInLoop.ts, 1, 18)) +>str.length : Symbol(String.length, Decl(lib.d.ts, --, --)) +>str : Symbol(str, Decl(capturedVarInLoop.ts, 1, 7)) +>length : Symbol(String.length, Decl(lib.d.ts, --, --)) + + let lambda1 = (y) => { }; +>lambda1 : Symbol(lambda1, Decl(capturedVarInLoop.ts, 2, 7)) +>y : Symbol(y, Decl(capturedVarInLoop.ts, 2, 19)) + + let lambda2 = () => lambda1(len); +>lambda2 : Symbol(lambda2, Decl(capturedVarInLoop.ts, 3, 7)) +>lambda1 : Symbol(lambda1, Decl(capturedVarInLoop.ts, 2, 7)) +>len : Symbol(len, Decl(capturedVarInLoop.ts, 1, 18)) +} diff --git a/tests/baselines/reference/capturedVarInLoop.types b/tests/baselines/reference/capturedVarInLoop.types new file mode 100644 index 00000000000..37d78df8ba3 --- /dev/null +++ b/tests/baselines/reference/capturedVarInLoop.types @@ -0,0 +1,30 @@ +=== tests/cases/compiler/capturedVarInLoop.ts === +for (var i = 0; i < 10; i++) { +>i : number +>0 : 0 +>i < 10 : boolean +>i : number +>10 : 10 +>i++ : number +>i : number + + var str = 'x', len = str.length; +>str : string +>'x' : "x" +>len : number +>str.length : number +>str : string +>length : number + + let lambda1 = (y) => { }; +>lambda1 : (y: any) => void +>(y) => { } : (y: any) => void +>y : any + + let lambda2 = () => lambda1(len); +>lambda2 : () => void +>() => lambda1(len) : () => void +>lambda1(len) : void +>lambda1 : (y: any) => void +>len : number +} diff --git a/tests/cases/compiler/capturedVarInLoop.ts b/tests/cases/compiler/capturedVarInLoop.ts new file mode 100644 index 00000000000..65cc5620f83 --- /dev/null +++ b/tests/cases/compiler/capturedVarInLoop.ts @@ -0,0 +1,6 @@ +// @target: es5 +for (var i = 0; i < 10; i++) { + var str = 'x', len = str.length; + let lambda1 = (y) => { }; + let lambda2 = () => lambda1(len); +} \ No newline at end of file From 64ea6803aad6fc07158a6b479edf3b06198a3df8 Mon Sep 17 00:00:00 2001 From: Joe Chung Date: Sat, 6 May 2017 22:11:14 -0700 Subject: [PATCH 68/92] Support @arg and @argument synonyms for @param JSDoc tag - Fix #15477 --- src/compiler/parser.ts | 2 + src/harness/unittests/jsDocParsing.ts | 12 +++++ ...parsesCorrectly.argSynonymForParamTag.json | 49 +++++++++++++++++++ ...sCorrectly.argumentSynonymForParamTag.json | 49 +++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argSynonymForParamTag.json create mode 100644 tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argumentSynonymForParamTag.json diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index d355ff24583..cc3fb24bdb8 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6502,6 +6502,8 @@ namespace ts { case "augments": tag = parseAugmentsTag(atToken, tagName); break; + case "arg": + case "argument": case "param": tag = parseParamTag(atToken, tagName); break; diff --git a/src/harness/unittests/jsDocParsing.ts b/src/harness/unittests/jsDocParsing.ts index 98c32c77778..309e49bd6b8 100644 --- a/src/harness/unittests/jsDocParsing.ts +++ b/src/harness/unittests/jsDocParsing.ts @@ -241,6 +241,18 @@ namespace ts { */`); + parsesCorrectly("argSynonymForParamTag", +`/** + * @arg {number} name1 Description + */`); + + + parsesCorrectly("argumentSynonymForParamTag", +`/** + * @argument {number} name1 Description + */`); + + parsesCorrectly("templateTag", `/** * @template T diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argSynonymForParamTag.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argSynonymForParamTag.json new file mode 100644 index 00000000000..064a040c58f --- /dev/null +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argSynonymForParamTag.json @@ -0,0 +1,49 @@ +{ + "kind": "JSDocComment", + "pos": 0, + "end": 44, + "tags": { + "0": { + "kind": "JSDocParameterTag", + "pos": 8, + "end": 27, + "atToken": { + "kind": "AtToken", + "pos": 8, + "end": 9 + }, + "tagName": { + "kind": "Identifier", + "pos": 9, + "end": 12, + "text": "arg" + }, + "typeExpression": { + "kind": "JSDocTypeExpression", + "pos": 13, + "end": 21, + "type": { + "kind": "NumberKeyword", + "pos": 14, + "end": 20 + } + }, + "postParameterName": { + "kind": "Identifier", + "pos": 22, + "end": 27, + "text": "name1" + }, + "parameterName": { + "kind": "Identifier", + "pos": 22, + "end": 27, + "text": "name1" + }, + "comment": "Description" + }, + "length": 1, + "pos": 8, + "end": 27 + } +} \ No newline at end of file diff --git a/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argumentSynonymForParamTag.json b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argumentSynonymForParamTag.json new file mode 100644 index 00000000000..264b5850223 --- /dev/null +++ b/tests/baselines/reference/JSDocParsing/DocComments.parsesCorrectly.argumentSynonymForParamTag.json @@ -0,0 +1,49 @@ +{ + "kind": "JSDocComment", + "pos": 0, + "end": 49, + "tags": { + "0": { + "kind": "JSDocParameterTag", + "pos": 8, + "end": 32, + "atToken": { + "kind": "AtToken", + "pos": 8, + "end": 9 + }, + "tagName": { + "kind": "Identifier", + "pos": 9, + "end": 17, + "text": "argument" + }, + "typeExpression": { + "kind": "JSDocTypeExpression", + "pos": 18, + "end": 26, + "type": { + "kind": "NumberKeyword", + "pos": 19, + "end": 25 + } + }, + "postParameterName": { + "kind": "Identifier", + "pos": 27, + "end": 32, + "text": "name1" + }, + "parameterName": { + "kind": "Identifier", + "pos": 27, + "end": 32, + "text": "name1" + }, + "comment": "Description" + }, + "length": 1, + "pos": 8, + "end": 32 + } +} \ No newline at end of file From c08e1fcc5d00c04ca5813e159e9b5644369227e2 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 8 May 2017 09:26:19 -0700 Subject: [PATCH 69/92] Remove check for static from checkKindsOfPropertyMemberOrderrides, which is only called on instance side --- src/compiler/checker.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d3e2233bc44..dfb1f9b832f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20678,11 +20678,6 @@ namespace ts { continue; } - if ((baseDeclarationFlags & ModifierFlags.Static) !== (derivedDeclarationFlags & ModifierFlags.Static)) { - // value of 'static' is not the same for properties - not override, skip it - continue; - } - if (isMethodLike(base) && isMethodLike(derived) || base.flags & SymbolFlags.PropertyOrAccessor && derived.flags & SymbolFlags.PropertyOrAccessor) { // method is overridden with method or property/accessor is overridden with property/accessor - correct case continue; From 22f353ac940bfd4e170d9e56a094fdd385476191 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 09:35:21 -0700 Subject: [PATCH 70/92] Turn ClassElement and TypeElement into unions too Slows down compilation another 3%, so I'm not sure we'll want to take this change. --- src/compiler/types.ts | 75 ++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 043c8b9a0b1..4ec5c0f97bf 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -616,7 +616,6 @@ namespace ts { | CallExpression | CallSignatureDeclaration | ClassDeclaration - | ClassElement | ClassExpression | ClassLikeDeclaration | ConstructSignatureDeclaration @@ -717,13 +716,14 @@ namespace ts { typeParameters?: NodeArray; parameters: NodeArray; type?: TypeNode; + questionToken?: QuestionToken; } - export interface CallSignatureDeclaration extends SignatureDeclaration, TypeElement { + export interface CallSignatureDeclaration extends SignatureDeclaration { kind: SyntaxKind.CallSignature; } - export interface ConstructSignatureDeclaration extends SignatureDeclaration, TypeElement { + export interface ConstructSignatureDeclaration extends SignatureDeclaration { kind: SyntaxKind.ConstructSignature; } @@ -762,7 +762,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface PropertySignature extends TypeElement { + export interface PropertySignature extends DeclarationBase { kind: SyntaxKind.PropertySignature | SyntaxKind.JSDocRecordMember; name: PropertyName; // Declared property name questionToken?: QuestionToken; // Present on optional property @@ -770,7 +770,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface PropertyDeclaration extends ClassElement { + export interface PropertyDeclaration extends DeclarationBase { kind: SyntaxKind.PropertyDeclaration; questionToken?: QuestionToken; // Present for use with reporting a grammar error name: PropertyName; @@ -876,7 +876,7 @@ namespace ts { body?: FunctionBody; } - export interface MethodSignature extends SignatureDeclaration, TypeElement { + export interface MethodSignature extends SignatureDeclaration { kind: SyntaxKind.MethodSignature; name: PropertyName; } @@ -890,27 +890,28 @@ namespace ts { // Because of this, it may be necessary to determine what sort of MethodDeclaration you have // at later stages of the compiler pipeline. In that case, you can either check the parent kind // of the method, or use helpers like isObjectLiteralMethodDeclaration - export interface MethodDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + export interface MethodDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { kind: SyntaxKind.MethodDeclaration; name: PropertyName; body?: FunctionBody; } - export interface ConstructorDeclaration extends FunctionLikeDeclaration, ClassElement { + export interface ConstructorDeclaration extends FunctionLikeDeclaration { kind: SyntaxKind.Constructor; parent?: ClassDeclaration | ClassExpression; body?: FunctionBody; } /** For when we encounter a semicolon in a class declaration. ES6 allows these as class elements. */ - export interface SemicolonClassElement extends ClassElement { + export interface SemicolonClassElement extends DeclarationBase { kind: SyntaxKind.SemicolonClassElement; parent?: ClassDeclaration | ClassExpression; + name?: PropertyName; } // See the comment on MethodDeclaration for the intuition behind GetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface GetAccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + export interface GetAccessorDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { kind: SyntaxKind.GetAccessor; parent?: ClassDeclaration | ClassExpression | ObjectLiteralExpression; name: PropertyName; @@ -919,7 +920,7 @@ namespace ts { // See the comment on MethodDeclaration for the intuition behind SetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface SetAccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + export interface SetAccessorDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { kind: SyntaxKind.SetAccessor; parent?: ClassDeclaration | ClassExpression | ObjectLiteralExpression; name: PropertyName; @@ -928,7 +929,7 @@ namespace ts { export type AccessorDeclaration = GetAccessorDeclaration | SetAccessorDeclaration; - export interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement, TypeElement { + export interface IndexSignatureDeclaration extends SignatureDeclaration { kind: SyntaxKind.IndexSignature; parent?: ClassDeclaration | ClassExpression | InterfaceDeclaration | TypeLiteralNode; } @@ -1695,7 +1696,7 @@ namespace ts { kind: SyntaxKind.DebuggerStatement; } - export interface MissingDeclaration extends DeclarationStatement, ClassElement, ObjectLiteralElement, TypeElement { + export interface MissingDeclaration extends DeclarationStatement, ObjectLiteralElement { kind: SyntaxKind.MissingDeclaration; name?: Identifier; } @@ -1863,34 +1864,26 @@ namespace ts { kind: SyntaxKind.ClassExpression; } - export interface ClassElement extends DeclarationBase { - kind: - | SyntaxKind.PropertyDeclaration - | SyntaxKind.MethodDeclaration - | SyntaxKind.Constructor - | SyntaxKind.SemicolonClassElement - | SyntaxKind.GetAccessor - | SyntaxKind.SetAccessor - | SyntaxKind.IndexSignature - | SyntaxKind.MissingDeclaration; - _classElementBrand: any; - name?: PropertyName; - } + export type ClassElement = + | PropertyDeclaration + | MethodDeclaration + | ConstructorDeclaration + | SemicolonClassElement + | GetAccessorDeclaration + | SetAccessorDeclaration + | IndexSignatureDeclaration + | MissingDeclaration; - export interface TypeElement extends DeclarationBase { - kind: - | SyntaxKind.CallSignature - | SyntaxKind.ConstructSignature - | SyntaxKind.PropertySignature - | SyntaxKind.MethodSignature - | SyntaxKind.IndexSignature - | SyntaxKind.MissingDeclaration - | SyntaxKind.JSDocPropertyTag - | SyntaxKind.JSDocRecordMember; - _typeElementBrand: any; - name?: PropertyName; - questionToken?: QuestionToken; - } + export type TypeElement = + | CallSignatureDeclaration + | ConstructSignatureDeclaration + | PropertySignature + | MethodSignature + | IndexSignatureDeclaration + | MissingDeclaration + | IndexSignatureDeclaration + | JSDocPropertyTag + | JSDocRecordMember; export interface InterfaceDeclaration extends DeclarationStatement { kind: SyntaxKind.InterfaceDeclaration; @@ -2224,7 +2217,7 @@ namespace ts { jsDocTypeLiteral?: JSDocTypeLiteral; } - export interface JSDocPropertyTag extends JSDocTag, TypeElement { + export interface JSDocPropertyTag extends JSDocTag { kind: SyntaxKind.JSDocPropertyTag; name: Identifier; typeExpression: JSDocTypeExpression; From 2c5117b2d94ea44b8d8631bc3958eb6020348f94 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Mon, 8 May 2017 09:46:46 -0700 Subject: [PATCH 71/92] Refactor "isKnownProperty" to be use outside of checkTypeScriptAssignable as JSX do excess property after --- src/compiler/checker.ts | 58 +++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 37 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2d1aaedf0fc..fd2e18e7dd9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8688,29 +8688,6 @@ namespace ts { return Ternary.False; } - // Check if a property with the given name is known anywhere in the given type. In an object type, a property - // is considered known if the object type is empty and the check is for assignability, if the object type has - // index signatures, or if the property is actually declared in the object type. In a union or intersection - // type, a property is considered known if it is known in any constituent type. - function isKnownProperty(type: Type, name: string, isComparingJsxAttributes: boolean): boolean { - if (type.flags & TypeFlags.Object) { - const resolved = resolveStructuredTypeMembers(type); - if (resolved.stringIndexInfo || resolved.numberIndexInfo && isNumericLiteralName(name) || - getPropertyOfType(type, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { - // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known. - return true; - } - } - else if (type.flags & TypeFlags.UnionOrIntersection) { - for (const t of (type).types) { - if (isKnownProperty(t, name, isComparingJsxAttributes)) { - return true; - } - } - } - return false; - } - function hasExcessProperties(source: FreshObjectLiteralType, target: Type, reportErrors: boolean): boolean { if (maybeTypeOfKind(target, TypeFlags.Object) && !(getObjectFlags(target) & ObjectFlags.ObjectLiteralPatternWithComputedProperties)) { const isComparingJsxAttributes = !!(source.flags & TypeFlags.JsxAttributes); @@ -13875,21 +13852,26 @@ namespace ts { checkJsxAttributesAssignableToTagNameAttributes(node); } - // Check if a property with the given name is known anywhere in the given type. In an object type, a property - // is considered known if the object type is empty and the check is for assignability, if the object type has - // index signatures, or if the property is actually declared in the object type. In a union or intersection - // type, a property is considered known if it is known in any constituent type. - function isKnownProperty(type: Type, name: string, isComparingJsxAttributes: boolean): boolean { - if (type.flags & TypeFlags.Object) { - const resolved = resolveStructuredTypeMembers(type); + /** + * Check if a property with the given name is known anywhere in the given type. In an object type, a property + * is considered known if the object type is empty and the check is for assignability, if the object type has + * index signatures, or if the property is actually declared in the object type. In a union or intersection + * type, a property is considered known if it is known in any constituent type. + * @param targetType a type to search a given name in + * @param name a property name to search + * @param isComparingJsxAttributes a boolean flag indicating whether we are searching in JsxAttributesType + */ + function isKnownProperty(targetType: Type, name: string, isComparingJsxAttributes: boolean): boolean { + if (targetType.flags & TypeFlags.Object) { + const resolved = resolveStructuredTypeMembers(targetType); if (resolved.stringIndexInfo || resolved.numberIndexInfo && isNumericLiteralName(name) || - getPropertyOfType(type, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { + getPropertyOfType(targetType, name) || isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) { // For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known. return true; } } - else if (type.flags & TypeFlags.UnionOrIntersection) { - for (const t of (type).types) { + else if (targetType.flags & TypeFlags.UnionOrIntersection) { + for (const t of (targetType).types) { if (isKnownProperty(t, name, isComparingJsxAttributes)) { return true; } @@ -13898,7 +13880,7 @@ namespace ts { return false; } - /** + /** * Check whether the given attributes of JSX opening-like element is assignable to the tagName attributes. * Get the attributes type of the opening-like element through resolving the tagName, "target attributes" * Check assignablity between given attributes property, "source attributes", and the "target attributes" @@ -13930,14 +13912,16 @@ namespace ts { error(openingLikeElement, Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, getJsxElementPropertiesName()); } else { + // Check if sourceAttributesType assignable to targetAttributesType though this check will allow excess properties const isSourceAttributeTypeAssignableToTarget = checkTypeAssignableTo(sourceAttributesType, targetAttributesType, openingLikeElement.attributes.properties.length > 0 ? openingLikeElement.attributes : openingLikeElement); - // After we check for assignability, we will do another pass to check that - // all explicitly specified attributes have correct name corresponding with target (as those will be assignable as spread type allows excess properties) - // Note: if the type of these explicitly specified attributes do not match it will be an error during above assignability check. + // After we check for assignability, we will do another pass to check that all explicitly specified attributes have correct name corresponding in targetAttributeType. + // This will allow excess properties in spread type as it is very common pattern to spread outter attributes into React component in its render method. if (isSourceAttributeTypeAssignableToTarget && !isTypeAny(sourceAttributesType) && !isTypeAny(targetAttributesType)) { for (const attribute of openingLikeElement.attributes.properties) { if (isJsxAttribute(attribute) && !isKnownProperty(targetAttributesType, attribute.name.text, /*isComparingJsxAttributes*/ true)) { error(attribute, Diagnostics.Property_0_does_not_exist_on_type_1, attribute.name.text, typeToString(targetAttributesType)); + // We break here so that errors won't be cascading + break; } } } From 1e32b1097c65c6dae2a1234256f2e31176e37597 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Mon, 8 May 2017 09:46:54 -0700 Subject: [PATCH 72/92] Update baselines --- ...StringLiteralsInJsxAttributes02.errors.txt | 14 +++++------ .../tsxAttributeResolution1.errors.txt | 18 +++++--------- .../tsxAttributeResolution11.errors.txt | 6 ++--- .../tsxAttributeResolution15.errors.txt | 6 ++--- .../tsxElementResolution11.errors.txt | 6 ++--- .../tsxElementResolution3.errors.txt | 4 ++-- .../tsxElementResolution4.errors.txt | 4 ++-- ...ponentWithDefaultTypeParameter3.errors.txt | 14 ++++------- ...elessFunctionComponentOverload4.errors.txt | 22 ++++++++++++----- ...elessFunctionComponentOverload5.errors.txt | 6 +++-- ...tsxStatelessFunctionComponents1.errors.txt | 24 ++++++++----------- ...tsxStatelessFunctionComponents2.errors.txt | 6 ++--- .../reference/tsxUnionElementType4.errors.txt | 12 ++++------ .../reference/tsxUnionElementType6.errors.txt | 6 ++--- 14 files changed, 66 insertions(+), 82 deletions(-) diff --git a/tests/baselines/reference/contextuallyTypedStringLiteralsInJsxAttributes02.errors.txt b/tests/baselines/reference/contextuallyTypedStringLiteralsInJsxAttributes02.errors.txt index 63686e29419..ccf56532bc4 100644 --- a/tests/baselines/reference/contextuallyTypedStringLiteralsInJsxAttributes02.errors.txt +++ b/tests/baselines/reference/contextuallyTypedStringLiteralsInJsxAttributes02.errors.txt @@ -2,10 +2,10 @@ tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(27,24): err Type '{ extra: true; onClick: (k: "left" | "right") => void; }' is not assignable to type 'LinkProps'. Property 'goTo' is missing in type '{ extra: true; onClick: (k: "left" | "right") => void; }'. tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(28,24): error TS2322: Type '{ onClick: (k: "left" | "right") => void; extra: true; }' is not assignable to type 'IntrinsicAttributes & LinkProps'. - Property 'onClick' does not exist on type 'IntrinsicAttributes & LinkProps'. + Type '{ onClick: (k: "left" | "right") => void; extra: true; }' is not assignable to type 'LinkProps'. + Property 'goTo' is missing in type '{ onClick: (k: "left" | "right") => void; extra: true; }'. tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(29,43): error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. -tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(30,24): error TS2322: Type '{ goTo: "home"; extra: true; }' is not assignable to type 'IntrinsicAttributes & LinkProps'. - Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. +tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(30,36): error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(33,65): error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & ButtonProps'. tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(36,44): error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. @@ -45,14 +45,14 @@ tests/cases/conformance/types/contextualTypes/jsxAttributes/file.tsx(36,44): err const b2 = {console.log(k)}} extra />; // k has type "left" | "right" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ onClick: (k: "left" | "right") => void; extra: true; }' is not assignable to type 'IntrinsicAttributes & LinkProps'. -!!! error TS2322: Property 'onClick' does not exist on type 'IntrinsicAttributes & LinkProps'. +!!! error TS2322: Type '{ onClick: (k: "left" | "right") => void; extra: true; }' is not assignable to type 'LinkProps'. +!!! error TS2322: Property 'goTo' is missing in type '{ onClick: (k: "left" | "right") => void; extra: true; }'. const b3 = ; // goTo has type"home" | "contact" ~~~~~ !!! error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. const b4 = ; // goTo has type "home" | "contact" - ~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type '{ goTo: "home"; extra: true; }' is not assignable to type 'IntrinsicAttributes & LinkProps'. -!!! error TS2322: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. + ~~~~~ +!!! error TS2339: Property 'extra' does not exist on type 'IntrinsicAttributes & LinkProps'. export function NoOverload(buttonProps: ButtonProps): JSX.Element { return undefined } const c1 = {console.log(k)}}} extra />; // k has type any diff --git a/tests/baselines/reference/tsxAttributeResolution1.errors.txt b/tests/baselines/reference/tsxAttributeResolution1.errors.txt index d064f72f85d..f6c84f80fa5 100644 --- a/tests/baselines/reference/tsxAttributeResolution1.errors.txt +++ b/tests/baselines/reference/tsxAttributeResolution1.errors.txt @@ -1,15 +1,12 @@ tests/cases/conformance/jsx/file.tsx(23,8): error TS2322: Type '{ x: "0"; }' is not assignable to type 'Attribs1'. Types of property 'x' are incompatible. Type '"0"' is not assignable to type 'number'. -tests/cases/conformance/jsx/file.tsx(24,8): error TS2322: Type '{ y: 0; }' is not assignable to type 'Attribs1'. - Property 'y' does not exist on type 'Attribs1'. -tests/cases/conformance/jsx/file.tsx(25,8): error TS2322: Type '{ y: "foo"; }' is not assignable to type 'Attribs1'. - Property 'y' does not exist on type 'Attribs1'. +tests/cases/conformance/jsx/file.tsx(24,8): error TS2339: Property 'y' does not exist on type 'Attribs1'. +tests/cases/conformance/jsx/file.tsx(25,8): error TS2339: Property 'y' does not exist on type 'Attribs1'. tests/cases/conformance/jsx/file.tsx(26,8): error TS2322: Type '{ x: "32"; }' is not assignable to type 'Attribs1'. Types of property 'x' are incompatible. Type '"32"' is not assignable to type 'number'. -tests/cases/conformance/jsx/file.tsx(27,8): error TS2322: Type '{ var: "10"; }' is not assignable to type 'Attribs1'. - Property 'var' does not exist on type 'Attribs1'. +tests/cases/conformance/jsx/file.tsx(27,8): error TS2339: Property 'var' does not exist on type 'Attribs1'. tests/cases/conformance/jsx/file.tsx(29,1): error TS2322: Type '{}' is not assignable to type '{ reqd: string; }'. Property 'reqd' is missing in type '{}'. tests/cases/conformance/jsx/file.tsx(30,8): error TS2322: Type '{ reqd: 10; }' is not assignable to type '{ reqd: string; }'. @@ -47,12 +44,10 @@ tests/cases/conformance/jsx/file.tsx(30,8): error TS2322: Type '{ reqd: 10; }' i !!! error TS2322: Type '"0"' is not assignable to type 'number'. ; // Error, no property "y" ~~~~~ -!!! error TS2322: Type '{ y: 0; }' is not assignable to type 'Attribs1'. -!!! error TS2322: Property 'y' does not exist on type 'Attribs1'. +!!! error TS2339: Property 'y' does not exist on type 'Attribs1'. ; // Error, no property "y" ~~~~~~~ -!!! error TS2322: Type '{ y: "foo"; }' is not assignable to type 'Attribs1'. -!!! error TS2322: Property 'y' does not exist on type 'Attribs1'. +!!! error TS2339: Property 'y' does not exist on type 'Attribs1'. ; // Error, "32" is not number ~~~~~~ !!! error TS2322: Type '{ x: "32"; }' is not assignable to type 'Attribs1'. @@ -60,8 +55,7 @@ tests/cases/conformance/jsx/file.tsx(30,8): error TS2322: Type '{ reqd: 10; }' i !!! error TS2322: Type '"32"' is not assignable to type 'number'. ; // Error, no 'var' property ~~~~~~~~ -!!! error TS2322: Type '{ var: "10"; }' is not assignable to type 'Attribs1'. -!!! error TS2322: Property 'var' does not exist on type 'Attribs1'. +!!! error TS2339: Property 'var' does not exist on type 'Attribs1'. ; // Error, missing reqd ~~~~~~~~~ diff --git a/tests/baselines/reference/tsxAttributeResolution11.errors.txt b/tests/baselines/reference/tsxAttributeResolution11.errors.txt index 08a75c3b8bb..907b9bce776 100644 --- a/tests/baselines/reference/tsxAttributeResolution11.errors.txt +++ b/tests/baselines/reference/tsxAttributeResolution11.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(11,22): error TS2322: Type '{ bar: "world"; }' is not assignable to type 'IntrinsicAttributes & { ref?: string; }'. - Property 'bar' does not exist on type 'IntrinsicAttributes & { ref?: string; }'. +tests/cases/conformance/jsx/file.tsx(11,22): error TS2339: Property 'bar' does not exist on type 'IntrinsicAttributes & { ref?: string; }'. ==== tests/cases/conformance/jsx/react.d.ts (0 errors) ==== @@ -28,7 +27,6 @@ tests/cases/conformance/jsx/file.tsx(11,22): error TS2322: Type '{ bar: "world"; // Should be an OK var x = ; ~~~~~~~~~~~ -!!! error TS2322: Type '{ bar: "world"; }' is not assignable to type 'IntrinsicAttributes & { ref?: string; }'. -!!! error TS2322: Property 'bar' does not exist on type 'IntrinsicAttributes & { ref?: string; }'. +!!! error TS2339: Property 'bar' does not exist on type 'IntrinsicAttributes & { ref?: string; }'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxAttributeResolution15.errors.txt b/tests/baselines/reference/tsxAttributeResolution15.errors.txt index 870599acd27..2ab79ea7aae 100644 --- a/tests/baselines/reference/tsxAttributeResolution15.errors.txt +++ b/tests/baselines/reference/tsxAttributeResolution15.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(11,21): error TS2322: Type '{ prop1: "hello"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. - Property 'prop1' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +tests/cases/conformance/jsx/file.tsx(11,21): error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. ==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== @@ -15,8 +14,7 @@ tests/cases/conformance/jsx/file.tsx(11,21): error TS2322: Type '{ prop1: "hello // Error let a = ~~~~~~~~~~~~~ -!!! error TS2322: Type '{ prop1: "hello"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. -!!! error TS2322: Property 'prop1' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +!!! error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. // OK let b = { this.textInput = input; }} /> diff --git a/tests/baselines/reference/tsxElementResolution11.errors.txt b/tests/baselines/reference/tsxElementResolution11.errors.txt index f0d5cf1e009..878f5a8b337 100644 --- a/tests/baselines/reference/tsxElementResolution11.errors.txt +++ b/tests/baselines/reference/tsxElementResolution11.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(17,7): error TS2322: Type '{ x: 10; }' is not assignable to type '{ q?: number; }'. - Property 'x' does not exist on type '{ q?: number; }'. +tests/cases/conformance/jsx/file.tsx(17,7): error TS2339: Property 'x' does not exist on type '{ q?: number; }'. ==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== @@ -21,8 +20,7 @@ tests/cases/conformance/jsx/file.tsx(17,7): error TS2322: Type '{ x: 10; }' is n var Obj2: Obj2type; ; // Error ~~~~~~ -!!! error TS2322: Type '{ x: 10; }' is not assignable to type '{ q?: number; }'. -!!! error TS2322: Property 'x' does not exist on type '{ q?: number; }'. +!!! error TS2339: Property 'x' does not exist on type '{ q?: number; }'. interface Obj3type { new(n: string): { x: number; }; diff --git a/tests/baselines/reference/tsxElementResolution3.errors.txt b/tests/baselines/reference/tsxElementResolution3.errors.txt index d869821a4cb..4e7687c94e2 100644 --- a/tests/baselines/reference/tsxElementResolution3.errors.txt +++ b/tests/baselines/reference/tsxElementResolution3.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/jsx/file.tsx(12,7): error TS2322: Type '{ w: "err"; }' is not assignable to type '{ n: string; }'. - Property 'w' does not exist on type '{ n: string; }'. + Property 'n' is missing in type '{ w: "err"; }'. ==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== @@ -17,4 +17,4 @@ tests/cases/conformance/jsx/file.tsx(12,7): error TS2322: Type '{ w: "err"; }' i ; ~~~~~~~ !!! error TS2322: Type '{ w: "err"; }' is not assignable to type '{ n: string; }'. -!!! error TS2322: Property 'w' does not exist on type '{ n: string; }'. \ No newline at end of file +!!! error TS2322: Property 'n' is missing in type '{ w: "err"; }'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxElementResolution4.errors.txt b/tests/baselines/reference/tsxElementResolution4.errors.txt index b5d5437d872..461cfe025df 100644 --- a/tests/baselines/reference/tsxElementResolution4.errors.txt +++ b/tests/baselines/reference/tsxElementResolution4.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/jsx/file.tsx(16,7): error TS2322: Type '{ q: ""; }' is not assignable to type '{ m: string; }'. - Property 'q' does not exist on type '{ m: string; }'. + Property 'm' is missing in type '{ q: ""; }'. ==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== @@ -21,5 +21,5 @@ tests/cases/conformance/jsx/file.tsx(16,7): error TS2322: Type '{ q: ""; }' is n ; ~~~~ !!! error TS2322: Type '{ q: ""; }' is not assignable to type '{ m: string; }'. -!!! error TS2322: Property 'q' does not exist on type '{ m: string; }'. +!!! error TS2322: Property 'm' is missing in type '{ q: ""; }'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxReactComponentWithDefaultTypeParameter3.errors.txt b/tests/baselines/reference/tsxReactComponentWithDefaultTypeParameter3.errors.txt index c49bd643537..230ca1e2795 100644 --- a/tests/baselines/reference/tsxReactComponentWithDefaultTypeParameter3.errors.txt +++ b/tests/baselines/reference/tsxReactComponentWithDefaultTypeParameter3.errors.txt @@ -1,7 +1,5 @@ -tests/cases/conformance/jsx/file.tsx(16,17): error TS2322: Type '{ a: 10; b: "hi"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. - Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. -tests/cases/conformance/jsx/file.tsx(17,18): error TS2322: Type '{ a: "hi"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. - Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. +tests/cases/conformance/jsx/file.tsx(16,17): error TS2339: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. +tests/cases/conformance/jsx/file.tsx(17,18): error TS2339: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. ==== tests/cases/conformance/jsx/file.tsx (2 errors) ==== @@ -21,10 +19,8 @@ tests/cases/conformance/jsx/file.tsx(17,18): error TS2322: Type '{ a: "hi"; }' i // Error let x = - ~~~~~~~~~~~~~ -!!! error TS2322: Type '{ a: 10; b: "hi"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. -!!! error TS2322: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. + ~~~~~~ +!!! error TS2339: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. let x2 = ~~~~~~ -!!! error TS2322: Type '{ a: "hi"; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. -!!! error TS2322: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. \ No newline at end of file +!!! error TS2339: Property 'a' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes> & { children?: ReactNode; }'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentOverload4.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentOverload4.errors.txt index c7f1b03f6aa..4f717bfca96 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentOverload4.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentOverload4.errors.txt @@ -1,5 +1,6 @@ tests/cases/conformance/jsx/file.tsx(12,22): error TS2322: Type '{ extraProp: true; }' is not assignable to type 'IntrinsicAttributes & { yy: number; yy1: string; }'. - Property 'extraProp' does not exist on type 'IntrinsicAttributes & { yy: number; yy1: string; }'. + Type '{ extraProp: true; }' is not assignable to type '{ yy: number; yy1: string; }'. + Property 'yy' is missing in type '{ extraProp: true; }'. tests/cases/conformance/jsx/file.tsx(13,22): error TS2322: Type '{ yy: 10; }' is not assignable to type 'IntrinsicAttributes & { yy: number; yy1: string; }'. Type '{ yy: 10; }' is not assignable to type '{ yy: number; yy1: string; }'. Property 'yy1' is missing in type '{ yy: 10; }'. @@ -28,9 +29,13 @@ tests/cases/conformance/jsx/file.tsx(34,29): error TS2322: Type '{ y1: "hello"; Types of property 'y1' are incompatible. Type '"hello"' is not assignable to type 'boolean'. tests/cases/conformance/jsx/file.tsx(35,29): error TS2322: Type '{ y1: "hello"; y2: 1000; children: "hi"; }' is not assignable to type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. - Property 'children' does not exist on type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. + Type '{ y1: "hello"; y2: 1000; children: "hi"; }' is not assignable to type '{ y1: boolean; y2?: number; y3: boolean; }'. + Types of property 'y1' are incompatible. + Type '"hello"' is not assignable to type 'boolean'. tests/cases/conformance/jsx/file.tsx(36,29): error TS2322: Type '{ y1: "hello"; y2: 1000; children: string; }' is not assignable to type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. - Property 'children' does not exist on type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. + Type '{ y1: "hello"; y2: 1000; children: string; }' is not assignable to type '{ y1: boolean; y2?: number; y3: boolean; }'. + Types of property 'y1' are incompatible. + Type '"hello"' is not assignable to type 'boolean'. ==== tests/cases/conformance/jsx/file.tsx (11 errors) ==== @@ -48,7 +53,8 @@ tests/cases/conformance/jsx/file.tsx(36,29): error TS2322: Type '{ y1: "hello"; const c0 = ; // extra property; ~~~~~~~~~ !!! error TS2322: Type '{ extraProp: true; }' is not assignable to type 'IntrinsicAttributes & { yy: number; yy1: string; }'. -!!! error TS2322: Property 'extraProp' does not exist on type 'IntrinsicAttributes & { yy: number; yy1: string; }'. +!!! error TS2322: Type '{ extraProp: true; }' is not assignable to type '{ yy: number; yy1: string; }'. +!!! error TS2322: Property 'yy' is missing in type '{ extraProp: true; }'. const c1 = ; // missing property; ~~~~~~~ !!! error TS2322: Type '{ yy: 10; }' is not assignable to type 'IntrinsicAttributes & { yy: number; yy1: string; }'. @@ -109,9 +115,13 @@ tests/cases/conformance/jsx/file.tsx(36,29): error TS2322: Type '{ y1: "hello"; const e3 = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ y1: "hello"; y2: 1000; children: "hi"; }' is not assignable to type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. -!!! error TS2322: Property 'children' does not exist on type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. +!!! error TS2322: Type '{ y1: "hello"; y2: 1000; children: "hi"; }' is not assignable to type '{ y1: boolean; y2?: number; y3: boolean; }'. +!!! error TS2322: Types of property 'y1' are incompatible. +!!! error TS2322: Type '"hello"' is not assignable to type 'boolean'. const e4 = Hi ~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ y1: "hello"; y2: 1000; children: string; }' is not assignable to type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. -!!! error TS2322: Property 'children' does not exist on type 'IntrinsicAttributes & { y1: boolean; y2?: number; y3: boolean; }'. +!!! error TS2322: Type '{ y1: "hello"; y2: 1000; children: string; }' is not assignable to type '{ y1: boolean; y2?: number; y3: boolean; }'. +!!! error TS2322: Types of property 'y1' are incompatible. +!!! error TS2322: Type '"hello"' is not assignable to type 'boolean'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentOverload5.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentOverload5.errors.txt index 7c5aa3daa36..b7e4fc78e0e 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentOverload5.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentOverload5.errors.txt @@ -1,5 +1,6 @@ tests/cases/conformance/jsx/file.tsx(48,24): error TS2322: Type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }' is not assignable to type 'IntrinsicAttributes & HyphenProps'. - Property 'to' does not exist on type 'IntrinsicAttributes & HyphenProps'. + Type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }' is not assignable to type 'HyphenProps'. + Property '"data-format"' is missing in type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }'. tests/cases/conformance/jsx/file.tsx(49,24): error TS2322: Type '{ to: string; onClick: (e: any) => void; children: string; }' is not assignable to type 'IntrinsicAttributes & HyphenProps'. Type '{ to: string; onClick: (e: any) => void; children: string; }' is not assignable to type 'HyphenProps'. Property '"data-format"' is missing in type '{ to: string; onClick: (e: any) => void; children: string; }'. @@ -75,7 +76,8 @@ tests/cases/conformance/jsx/file.tsx(56,24): error TS2322: Type '{ data-format: const b0 = {}}>GO; // extra property; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }' is not assignable to type 'IntrinsicAttributes & HyphenProps'. -!!! error TS2322: Property 'to' does not exist on type 'IntrinsicAttributes & HyphenProps'. +!!! error TS2322: Type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }' is not assignable to type 'HyphenProps'. +!!! error TS2322: Property '"data-format"' is missing in type '{ to: "/some/path"; onClick: (e: MouseEvent) => void; children: string; }'. const b1 = {}} {...obj0}>Hello world; // extra property; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2322: Type '{ to: string; onClick: (e: any) => void; children: string; }' is not assignable to type 'IntrinsicAttributes & HyphenProps'. diff --git a/tests/baselines/reference/tsxStatelessFunctionComponents1.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponents1.errors.txt index 1f2c00c73d1..243f29493bf 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponents1.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponents1.errors.txt @@ -1,18 +1,16 @@ tests/cases/conformance/jsx/file.tsx(19,16): error TS2322: Type '{ naaame: "world"; }' is not assignable to type 'IntrinsicAttributes & { name: string; }'. - Property 'naaame' does not exist on type 'IntrinsicAttributes & { name: string; }'. + Type '{ naaame: "world"; }' is not assignable to type '{ name: string; }'. + Property 'name' is missing in type '{ naaame: "world"; }'. tests/cases/conformance/jsx/file.tsx(27,15): error TS2322: Type '{ name: 42; }' is not assignable to type 'IntrinsicAttributes & { name?: string; }'. Type '{ name: 42; }' is not assignable to type '{ name?: string; }'. Types of property 'name' are incompatible. Type '42' is not assignable to type 'string'. -tests/cases/conformance/jsx/file.tsx(29,15): error TS2322: Type '{ naaaaaaame: "no"; }' is not assignable to type 'IntrinsicAttributes & { name?: string; }'. - Property 'naaaaaaame' does not exist on type 'IntrinsicAttributes & { name?: string; }'. +tests/cases/conformance/jsx/file.tsx(29,15): error TS2339: Property 'naaaaaaame' does not exist on type 'IntrinsicAttributes & { name?: string; }'. tests/cases/conformance/jsx/file.tsx(34,23): error TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & { "prop-name": string; }'. Type '{}' is not assignable to type '{ "prop-name": string; }'. Property '"prop-name"' is missing in type '{}'. -tests/cases/conformance/jsx/file.tsx(37,23): error TS2322: Type '{ prop1: true; }' is not assignable to type 'IntrinsicAttributes'. - Property 'prop1' does not exist on type 'IntrinsicAttributes'. -tests/cases/conformance/jsx/file.tsx(38,24): error TS2322: Type '{ ref: (x: any) => any; }' is not assignable to type 'IntrinsicAttributes'. - Property 'ref' does not exist on type 'IntrinsicAttributes'. +tests/cases/conformance/jsx/file.tsx(37,23): error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes'. +tests/cases/conformance/jsx/file.tsx(38,24): error TS2339: Property 'ref' does not exist on type 'IntrinsicAttributes'. tests/cases/conformance/jsx/file.tsx(41,16): error TS1005: ',' expected. @@ -38,7 +36,8 @@ tests/cases/conformance/jsx/file.tsx(41,16): error TS1005: ',' expected. let b = ; ~~~~~~~~~~~~~~ !!! error TS2322: Type '{ naaame: "world"; }' is not assignable to type 'IntrinsicAttributes & { name: string; }'. -!!! error TS2322: Property 'naaame' does not exist on type 'IntrinsicAttributes & { name: string; }'. +!!! error TS2322: Type '{ naaame: "world"; }' is not assignable to type '{ name: string; }'. +!!! error TS2322: Property 'name' is missing in type '{ naaame: "world"; }'. // OK let c = ; @@ -55,8 +54,7 @@ tests/cases/conformance/jsx/file.tsx(41,16): error TS1005: ',' expected. // Error let f = ; ~~~~~~~~~~~~~~~ -!!! error TS2322: Type '{ naaaaaaame: "no"; }' is not assignable to type 'IntrinsicAttributes & { name?: string; }'. -!!! error TS2322: Property 'naaaaaaame' does not exist on type 'IntrinsicAttributes & { name?: string; }'. +!!! error TS2339: Property 'naaaaaaame' does not exist on type 'IntrinsicAttributes & { name?: string; }'. // OK let g = ; @@ -70,12 +68,10 @@ tests/cases/conformance/jsx/file.tsx(41,16): error TS1005: ',' expected. // Error let i = ~~~~~ -!!! error TS2322: Type '{ prop1: true; }' is not assignable to type 'IntrinsicAttributes'. -!!! error TS2322: Property 'prop1' does not exist on type 'IntrinsicAttributes'. +!!! error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes'. let i1 = x.greeting.substr(10)} /> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type '{ ref: (x: any) => any; }' is not assignable to type 'IntrinsicAttributes'. -!!! error TS2322: Property 'ref' does not exist on type 'IntrinsicAttributes'. +!!! error TS2339: Property 'ref' does not exist on type 'IntrinsicAttributes'. let o = { prop1: true; diff --git a/tests/baselines/reference/tsxStatelessFunctionComponents2.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponents2.errors.txt index 275017ecd82..00e2c4a526c 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponents2.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponents2.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(19,16): error TS2322: Type '{ ref: "myRef"; }' is not assignable to type 'IntrinsicAttributes & { name?: string; }'. - Property 'ref' does not exist on type 'IntrinsicAttributes & { name?: string; }'. +tests/cases/conformance/jsx/file.tsx(19,16): error TS2339: Property 'ref' does not exist on type 'IntrinsicAttributes & { name?: string; }'. tests/cases/conformance/jsx/file.tsx(25,42): error TS2339: Property 'subtr' does not exist on type 'string'. tests/cases/conformance/jsx/file.tsx(27,33): error TS2339: Property 'notARealProperty' does not exist on type 'BigGreeter'. tests/cases/conformance/jsx/file.tsx(35,26): error TS2339: Property 'propertyNotOnHtmlDivElement' does not exist on type 'HTMLDivElement'. @@ -26,8 +25,7 @@ tests/cases/conformance/jsx/file.tsx(35,26): error TS2339: Property 'propertyNot // Error - not allowed to specify 'ref' on SFCs let c = ; ~~~~~~~~~~~ -!!! error TS2322: Type '{ ref: "myRef"; }' is not assignable to type 'IntrinsicAttributes & { name?: string; }'. -!!! error TS2322: Property 'ref' does not exist on type 'IntrinsicAttributes & { name?: string; }'. +!!! error TS2339: Property 'ref' does not exist on type 'IntrinsicAttributes & { name?: string; }'. // OK - ref is valid for classes diff --git a/tests/baselines/reference/tsxUnionElementType4.errors.txt b/tests/baselines/reference/tsxUnionElementType4.errors.txt index 7c94a08b6ef..4658b566cc7 100644 --- a/tests/baselines/reference/tsxUnionElementType4.errors.txt +++ b/tests/baselines/reference/tsxUnionElementType4.errors.txt @@ -3,10 +3,8 @@ tests/cases/conformance/jsx/file.tsx(32,17): error TS2322: Type '{ x: true; }' i Type '{ x: true; }' is not assignable to type '{ x: string; }'. Types of property 'x' are incompatible. Type 'true' is not assignable to type 'string'. -tests/cases/conformance/jsx/file.tsx(33,21): error TS2322: Type '{ x: 10; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. - Property 'x' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. -tests/cases/conformance/jsx/file.tsx(34,22): error TS2322: Type '{ prop: true; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. - Property 'prop' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +tests/cases/conformance/jsx/file.tsx(33,21): error TS2339: Property 'x' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +tests/cases/conformance/jsx/file.tsx(34,22): error TS2339: Property 'prop' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. ==== tests/cases/conformance/jsx/file.tsx (3 errors) ==== @@ -50,10 +48,8 @@ tests/cases/conformance/jsx/file.tsx(34,22): error TS2322: Type '{ prop: true; } !!! error TS2322: Type 'true' is not assignable to type 'string'. let b = ~~~~~~ -!!! error TS2322: Type '{ x: 10; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. -!!! error TS2322: Property 'x' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +!!! error TS2339: Property 'x' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. let c = ; ~~~~ -!!! error TS2322: Type '{ prop: true; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. -!!! error TS2322: Property 'prop' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. +!!! error TS2339: Property 'prop' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes & { children?: ReactNode; }'. \ No newline at end of file diff --git a/tests/baselines/reference/tsxUnionElementType6.errors.txt b/tests/baselines/reference/tsxUnionElementType6.errors.txt index 1f31fb21f26..cac96565b80 100644 --- a/tests/baselines/reference/tsxUnionElementType6.errors.txt +++ b/tests/baselines/reference/tsxUnionElementType6.errors.txt @@ -1,5 +1,4 @@ -tests/cases/conformance/jsx/file.tsx(18,23): error TS2322: Type '{ x: true; }' is not assignable to type 'IntrinsicAttributes'. - Property 'x' does not exist on type 'IntrinsicAttributes'. +tests/cases/conformance/jsx/file.tsx(18,23): error TS2339: Property 'x' does not exist on type 'IntrinsicAttributes'. tests/cases/conformance/jsx/file.tsx(19,27): error TS2322: Type '{ x: "hi"; }' is not assignable to type 'IntrinsicAttributes & { x: boolean; }'. Type '{ x: "hi"; }' is not assignable to type '{ x: boolean; }'. Types of property 'x' are incompatible. @@ -32,8 +31,7 @@ tests/cases/conformance/jsx/file.tsx(21,27): error TS2322: Type '{}' is not assi // Error let a = ; ~ -!!! error TS2322: Type '{ x: true; }' is not assignable to type 'IntrinsicAttributes'. -!!! error TS2322: Property 'x' does not exist on type 'IntrinsicAttributes'. +!!! error TS2339: Property 'x' does not exist on type 'IntrinsicAttributes'. let b = ; ~~~~~~ !!! error TS2322: Type '{ x: "hi"; }' is not assignable to type 'IntrinsicAttributes & { x: boolean; }'. From 9e03d42fda96f22e113c3b439495c814fdc735a0 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 8 May 2017 10:33:48 -0700 Subject: [PATCH 73/92] In addStringLiteralCompletionsFromType, use getBaseConstraintOfType instead of getApparentType --- src/compiler/checker.ts | 3 ++- src/compiler/types.ts | 1 + src/services/completions.ts | 2 +- tests/cases/fourslash/completionsKeyof.ts | 17 +++++++++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/completionsKeyof.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d3e2233bc44..64e45f2a905 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -204,7 +204,8 @@ namespace ts { // since we are only interested in declarations of the module itself return tryFindAmbientModule(moduleName, /*withAugmentations*/ false); }, - getApparentType + getApparentType, + getBaseConstraintOfType, }; const tupleTypes: GenericType[] = []; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index e85f4c8c476..afebdfd7bcd 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2552,6 +2552,7 @@ namespace ts { tryGetMemberInModuleExports(memberName: string, moduleSymbol: Symbol): Symbol | undefined; getApparentType(type: Type): Type; + /* @internal */ getBaseConstraintOfType(type: Type): Type; /* @internal */ tryFindAmbientModuleWithoutAugmentations(moduleName: string): Symbol; diff --git a/src/services/completions.ts b/src/services/completions.ts index 6ac3762b4c7..3ec936d282f 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -260,7 +260,7 @@ namespace ts.Completions { function addStringLiteralCompletionsFromType(type: Type, result: Push, typeChecker: TypeChecker): void { if (type && type.flags & TypeFlags.TypeParameter) { - type = typeChecker.getApparentType(type); + type = typeChecker.getBaseConstraintOfType(type); } if (!type) { return; diff --git a/tests/cases/fourslash/completionsKeyof.ts b/tests/cases/fourslash/completionsKeyof.ts new file mode 100644 index 00000000000..e3beae556c5 --- /dev/null +++ b/tests/cases/fourslash/completionsKeyof.ts @@ -0,0 +1,17 @@ +/// + +////interface A { a: number; }; +////interface B { a: number; b: number; }; +////function f(key: T) {} +////f("/*f*/"); +////function g(key: T) {} +////g("/*g*/"); + +goTo.marker("f"); +verify.completionListCount(1); +verify.completionListContains("a"); + +goTo.marker("g"); +verify.completionListCount(2); +verify.completionListContains("a"); +verify.completionListContains("b"); From 6038ea09c9e80972ac37817dd69044e8bd187f30 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 10:40:24 -0700 Subject: [PATCH 74/92] Simplify JS check in index constraint error reporting Any declaration that is a BinaryExpression is a special javascript declaration, and all JS declarations that are checked for index constraint compatibility are, in fact, relevant. --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d3e2233bc44..a93585156bb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20339,7 +20339,7 @@ namespace ts { // this allows to rule out cases when both property and indexer are inherited from the base class let errorNode: Node; if (propDeclaration && - (getSpecialPropertyAssignmentKind(propDeclaration as BinaryExpression) === SpecialPropertyAssignmentKind.ThisProperty || + (propDeclaration.kind === SyntaxKind.BinaryExpression || propDeclaration.name.kind === SyntaxKind.ComputedPropertyName || prop.parent === containingType.symbol)) { errorNode = propDeclaration; From 5ad2ced0c345141272ea101656d1b0ba45411884 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 11:03:41 -0700 Subject: [PATCH 75/92] Update test with trickier case from #15616 --- ...aintOfJavascriptClassExpression.errors.txt | 42 +++++++++++++++++++ ...exConstraintOfJavascriptClassExpression.js | 32 -------------- ...exConstraintOfJavascriptClassExpression.ts | 8 ++++ 3 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt delete mode 100644 tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.js diff --git a/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt b/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt new file mode 100644 index 00000000000..f648f52bb58 --- /dev/null +++ b/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt @@ -0,0 +1,42 @@ +tests/cases/compiler/weird.js(1,1): error TS2304: Cannot find name 'someFunction'. +tests/cases/compiler/weird.js(1,23): error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. +tests/cases/compiler/weird.js(4,17): error TS8009: 'const' can only be used in a .ts file. +tests/cases/compiler/weird.js(4,17): error TS1248: A class member cannot have the 'const' keyword. +tests/cases/compiler/weird.js(5,3): error TS2377: Constructors for derived classes must contain a 'super' call. +tests/cases/compiler/weird.js(6,4): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. +tests/cases/compiler/weird.js(8,25): error TS7006: Parameter 'error' implicitly has an 'any' type. +tests/cases/compiler/weird.js(9,54): error TS2663: Cannot find name 'DEFAULT_MESSAGE'. Did you mean the instance member 'this.DEFAULT_MESSAGE'? + + +==== tests/cases/compiler/weird.js (8 errors) ==== + someFunction(function(BaseClass) { + ~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'someFunction'. + ~~~~~~~~~ +!!! error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. + 'use strict'; + class Hello extends BaseClass { + const DEFAULT_MESSAGE = "nop!"; + ~~~~~ +!!! error TS8009: 'const' can only be used in a .ts file. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1248: A class member cannot have the 'const' keyword. + constructor() { + ~~~~~~~~~~~~~~~ + this.foo = "bar"; + ~~~~~~~~~~~~~~~~~~~~ + ~~~~ +!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. + } + ~~~ +!!! error TS2377: Constructors for derived classes must contain a 'super' call. + _render(error) { + ~~~~~ +!!! error TS7006: Parameter 'error' implicitly has an 'any' type. + const message = error.message || DEFAULT_MESSAGE; + ~~~~~~~~~~~~~~~ +!!! error TS2663: Cannot find name 'DEFAULT_MESSAGE'. Did you mean the instance member 'this.DEFAULT_MESSAGE'? + } + } + }); + \ No newline at end of file diff --git a/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.js b/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.js deleted file mode 100644 index a23461a1b58..00000000000 --- a/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.js +++ /dev/null @@ -1,32 +0,0 @@ -//// [weird.js] -someFunction(function(BaseClass) { - class Hello extends BaseClass { - constructor() { - this.foo = "bar"; - } - } -}); - - -//// [foo.js] -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -someFunction(function (BaseClass) { - var Hello = (function (_super) { - __extends(Hello, _super); - function Hello() { - var _this = this; - _this.foo = "bar"; - return _this; - } - return Hello; - }(BaseClass)); -}); diff --git a/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts b/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts index 8de18a69536..51af2b276a2 100644 --- a/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts +++ b/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts @@ -1,10 +1,18 @@ // @Filename: weird.js // @allowJs: true +// @checkJs: true +// @strict: true +// @noEmit: true // @out: foo.js someFunction(function(BaseClass) { + 'use strict'; class Hello extends BaseClass { + const DEFAULT_MESSAGE = "nop!"; constructor() { this.foo = "bar"; } + _render(error) { + const message = error.message || DEFAULT_MESSAGE; + } } }); From 883ccaee5f5201c2154381c1941485ae675bbe4a Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 8 May 2017 11:29:52 -0700 Subject: [PATCH 76/92] Remove old commented-out code from signatureHelp --- src/services/signatureHelp.ts | 162 ---------------------------------- 1 file changed, 162 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 7c4f8fb016d..b250ad49467 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -1,168 +1,6 @@ /// /* @internal */ namespace ts.SignatureHelp { - - // A partially written generic type expression is not guaranteed to have the correct syntax tree. the expression could be parsed as less than/greater than expression or a comma expression - // or some other combination depending on what the user has typed so far. For the purposes of signature help we need to consider any location after "<" as a possible generic type reference. - // To do this, the method will back parse the expression starting at the position required. it will try to parse the current expression as a generic type expression, if it did succeed it - // will return the generic identifier that started the expression (e.g. "foo" in "foo Date: Mon, 8 May 2017 11:36:30 -0700 Subject: [PATCH 77/92] Clean up test a little --- ...aintOfJavascriptClassExpression.errors.txt | 45 +++++++------------ ...exConstraintOfJavascriptClassExpression.ts | 21 ++++----- 2 files changed, 27 insertions(+), 39 deletions(-) diff --git a/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt b/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt index f648f52bb58..d90e6d506ff 100644 --- a/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt +++ b/tests/baselines/reference/checkIndexConstraintOfJavascriptClassExpression.errors.txt @@ -1,42 +1,29 @@ tests/cases/compiler/weird.js(1,1): error TS2304: Cannot find name 'someFunction'. tests/cases/compiler/weird.js(1,23): error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. -tests/cases/compiler/weird.js(4,17): error TS8009: 'const' can only be used in a .ts file. -tests/cases/compiler/weird.js(4,17): error TS1248: A class member cannot have the 'const' keyword. -tests/cases/compiler/weird.js(5,3): error TS2377: Constructors for derived classes must contain a 'super' call. -tests/cases/compiler/weird.js(6,4): error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. -tests/cases/compiler/weird.js(8,25): error TS7006: Parameter 'error' implicitly has an 'any' type. -tests/cases/compiler/weird.js(9,54): error TS2663: Cannot find name 'DEFAULT_MESSAGE'. Did you mean the instance member 'this.DEFAULT_MESSAGE'? +tests/cases/compiler/weird.js(6,13): error TS2346: Supplied parameters do not match any signature of call target. +tests/cases/compiler/weird.js(9,17): error TS7006: Parameter 'error' implicitly has an 'any' type. -==== tests/cases/compiler/weird.js (8 errors) ==== +==== tests/cases/compiler/weird.js (4 errors) ==== someFunction(function(BaseClass) { ~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'someFunction'. ~~~~~~~~~ !!! error TS7006: Parameter 'BaseClass' implicitly has an 'any' type. - 'use strict'; - class Hello extends BaseClass { - const DEFAULT_MESSAGE = "nop!"; + 'use strict'; + const DEFAULT_MESSAGE = "nop!"; + class Hello extends BaseClass { + constructor() { + super(); + ~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. + this.foo = "bar"; + } + _render(error) { ~~~~~ -!!! error TS8009: 'const' can only be used in a .ts file. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS1248: A class member cannot have the 'const' keyword. - constructor() { - ~~~~~~~~~~~~~~~ - this.foo = "bar"; - ~~~~~~~~~~~~~~~~~~~~ - ~~~~ -!!! error TS17009: 'super' must be called before accessing 'this' in the constructor of a derived class. - } - ~~~ -!!! error TS2377: Constructors for derived classes must contain a 'super' call. - _render(error) { - ~~~~~ !!! error TS7006: Parameter 'error' implicitly has an 'any' type. - const message = error.message || DEFAULT_MESSAGE; - ~~~~~~~~~~~~~~~ -!!! error TS2663: Cannot find name 'DEFAULT_MESSAGE'. Did you mean the instance member 'this.DEFAULT_MESSAGE'? - } - } + const message = error.message || DEFAULT_MESSAGE; + } + } }); \ No newline at end of file diff --git a/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts b/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts index 51af2b276a2..58844d98fd8 100644 --- a/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts +++ b/tests/cases/compiler/checkIndexConstraintOfJavascriptClassExpression.ts @@ -5,14 +5,15 @@ // @noEmit: true // @out: foo.js someFunction(function(BaseClass) { - 'use strict'; - class Hello extends BaseClass { - const DEFAULT_MESSAGE = "nop!"; - constructor() { - this.foo = "bar"; - } - _render(error) { - const message = error.message || DEFAULT_MESSAGE; - } - } + 'use strict'; + const DEFAULT_MESSAGE = "nop!"; + class Hello extends BaseClass { + constructor() { + super(); + this.foo = "bar"; + } + _render(error) { + const message = error.message || DEFAULT_MESSAGE; + } + } }); From eb9d4c0586db80a6b773cba02d8fb24290008142 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 8 May 2017 13:25:12 -0700 Subject: [PATCH 78/92] findAllReferences: Given a synthetic property, find references for the original property. --- src/services/findAllReferences.ts | 5 ++++- tests/cases/fourslash/findAllRefsMappedType.ts | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/findAllRefsMappedType.ts diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index fd717fc546e..8dbbe3b1547 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -273,7 +273,7 @@ namespace ts.FindAllReferences.Core { } } - const symbol = checker.getSymbolAtLocation(node); + let symbol = checker.getSymbolAtLocation(node); // Could not find a symbol e.g. unknown identifier if (!symbol) { @@ -285,6 +285,9 @@ namespace ts.FindAllReferences.Core { return undefined; } + // If this property is derived from another one, find references on the original property instead. + symbol = (symbol as ts.SymbolLinks).syntheticOrigin || symbol; + // The symbol was an internal symbol and does not have a declaration e.g. undefined symbol if (!symbol.declarations || !symbol.declarations.length) { return undefined; diff --git a/tests/cases/fourslash/findAllRefsMappedType.ts b/tests/cases/fourslash/findAllRefsMappedType.ts new file mode 100644 index 00000000000..97658da08c1 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsMappedType.ts @@ -0,0 +1,10 @@ +/// + +////interface T { [|{| "isWriteAccess": true, "isDefinition": true |}a|]: number; } +////type U = { readonly [K in keyof T]?: string }; +////declare const t: T; +////t.[|a|]; +////declare const u: U; +////u.[|a|]; + +verify.singleReferenceGroup("(property) T.a: number"); From bb1125a2b6fbd3ffeb9025e83b4c1a8a7032b68b Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Mon, 8 May 2017 13:31:44 -0700 Subject: [PATCH 79/92] Do not error when spread generic type --- src/compiler/checker.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2b24c947f90..e544b9239f6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13285,11 +13285,7 @@ namespace ts { attributesArray = []; attributesTable = createMap(); } - const exprType = checkExpression(attributeDecl.expression); - if (!isValidSpreadType(exprType)) { - error(attributeDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types); - hasSpreadAnyType = true; - } + const exprType = getApparentType(checkExpression(attributeDecl.expression)) if (isTypeAny(exprType)) { hasSpreadAnyType = true; } From d17450bbbd81b528eabe0326a780c8b044282b3b Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Mon, 8 May 2017 13:35:09 -0700 Subject: [PATCH 80/92] Update tests and baselines --- .../tsxAttributeResolution5.errors.txt | 19 ++- ...ionComponentsWithTypeArguments2.errors.txt | 20 ++- ...ionComponentsWithTypeArguments3.errors.txt | 50 ------ ...nctionComponentsWithTypeArguments3.symbols | 159 +++++++++--------- ...FunctionComponentsWithTypeArguments3.types | 5 +- ...ionComponentsWithTypeArguments4.errors.txt | 10 +- ...ionComponentsWithTypeArguments5.errors.txt | 25 +-- ...essFunctionComponentsWithTypeArguments5.js | 9 +- ...ssFunctionComponentsWithTypeArguments5.tsx | 3 +- 9 files changed, 125 insertions(+), 175 deletions(-) delete mode 100644 tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt diff --git a/tests/baselines/reference/tsxAttributeResolution5.errors.txt b/tests/baselines/reference/tsxAttributeResolution5.errors.txt index ffbd41a07b2..0c6be5f35d0 100644 --- a/tests/baselines/reference/tsxAttributeResolution5.errors.txt +++ b/tests/baselines/reference/tsxAttributeResolution5.errors.txt @@ -1,11 +1,13 @@ -tests/cases/conformance/jsx/file.tsx(17,16): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(21,16): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(25,16): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(21,16): error TS2322: Type '{ x: number; }' is not assignable to type 'Attribs1'. + Types of property 'x' are incompatible. + Type 'number' is not assignable to type 'string'. +tests/cases/conformance/jsx/file.tsx(25,16): error TS2322: Type '{ y: string; }' is not assignable to type 'Attribs1'. + Property 'x' is missing in type '{ y: string; }'. tests/cases/conformance/jsx/file.tsx(29,8): error TS2322: Type '{}' is not assignable to type 'Attribs1'. Property 'x' is missing in type '{}'. -==== tests/cases/conformance/jsx/file.tsx (4 errors) ==== +==== tests/cases/conformance/jsx/file.tsx (3 errors) ==== declare module JSX { interface Element { } interface IntrinsicElements { @@ -23,20 +25,21 @@ tests/cases/conformance/jsx/file.tsx(29,8): error TS2322: Type '{}' is not assig function make1 (obj: T) { return ; // OK - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. } function make2 (obj: T) { return ; // Error (x is number, not string) ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. +!!! error TS2322: Type '{ x: number; }' is not assignable to type 'Attribs1'. +!!! error TS2322: Types of property 'x' are incompatible. +!!! error TS2322: Type 'number' is not assignable to type 'string'. } function make3 (obj: T) { return ; // Error, missing x ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. +!!! error TS2322: Type '{ y: string; }' is not assignable to type 'Attribs1'. +!!! error TS2322: Property 'x' is missing in type '{ y: string; }'. } diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.errors.txt index c98c918f3c5..c8ff457711c 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments2.errors.txt @@ -1,5 +1,10 @@ -tests/cases/conformance/jsx/file.tsx(8,34): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(13,34): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(8,34): error TS2322: Type '{ ignore-prop: 10; prop: number; }' is not assignable to type 'IntrinsicAttributes & { prop: number; "ignore-prop": string; }'. + Type '{ ignore-prop: 10; prop: number; }' is not assignable to type '{ prop: number; "ignore-prop": string; }'. + Types of property '"ignore-prop"' are incompatible. + Type '10' is not assignable to type 'string'. +tests/cases/conformance/jsx/file.tsx(13,34): error TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & { prop: {}; "ignore-prop": string; }'. + Type '{}' is not assignable to type '{ prop: {}; "ignore-prop": string; }'. + Property 'prop' is missing in type '{}'. tests/cases/conformance/jsx/file.tsx(20,19): error TS2322: Type '{ func: (a: number, b: string) => void; }' is not assignable to type 'IntrinsicAttributes & { func: (arg: number) => void; }'. Type '{ func: (a: number, b: string) => void; }' is not assignable to type '{ func: (arg: number) => void; }'. Types of property 'func' are incompatible. @@ -19,15 +24,20 @@ tests/cases/conformance/jsx/file.tsx(31,10): error TS2453: The type argument for // Error function Bar(arg: T) { let a1 = ; - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type '{ ignore-prop: 10; prop: number; }' is not assignable to type 'IntrinsicAttributes & { prop: number; "ignore-prop": string; }'. +!!! error TS2322: Type '{ ignore-prop: 10; prop: number; }' is not assignable to type '{ prop: number; "ignore-prop": string; }'. +!!! error TS2322: Types of property '"ignore-prop"' are incompatible. +!!! error TS2322: Type '10' is not assignable to type 'string'. } // Error function Baz(arg: T) { let a0 = ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. +!!! error TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & { prop: {}; "ignore-prop": string; }'. +!!! error TS2322: Type '{}' is not assignable to type '{ prop: {}; "ignore-prop": string; }'. +!!! error TS2322: Property 'prop' is missing in type '{}'. } declare function Link(l: {func: (arg: U)=>void}): JSX.Element; diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt deleted file mode 100644 index fdf65ca1746..00000000000 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.errors.txt +++ /dev/null @@ -1,50 +0,0 @@ -tests/cases/conformance/jsx/file.tsx(9,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(10,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(11,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(12,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(14,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(14,63): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(15,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(15,55): error TS2698: Spread types may only be created from object types. - - -==== tests/cases/conformance/jsx/file.tsx (8 errors) ==== - import React = require('react') - - declare function OverloadComponent(): JSX.Element; - declare function OverloadComponent(attr: {b: U, a?: string, "ignore-prop": boolean}): JSX.Element; - declare function OverloadComponent(attr: {b: U, a: T}): JSX.Element; - - // OK - function Baz(arg1: T, arg2: U) { - let a0 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - let a1 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - let a2 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - let a3 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - let a4 = ; - let a5 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - let a6 = ; - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. - } - - declare function Link(l: {func: (arg: U)=>void}): JSX.Element; - declare function Link(l: {func: (arg1:U, arg2: string)=>void}): JSX.Element; - function createLink(func: (a: number)=>void) { - let o = - let o1 = {}} />; - } \ No newline at end of file diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.symbols b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.symbols index ebd80b3d262..e93eb374aa7 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.symbols +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.symbols @@ -1,128 +1,127 @@ === tests/cases/conformance/jsx/file.tsx === - import React = require('react') >React : Symbol(React, Decl(file.tsx, 0, 0)) declare function OverloadComponent(): JSX.Element; ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->U : Symbol(U, Decl(file.tsx, 3, 35)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>U : Symbol(U, Decl(file.tsx, 2, 35)) >JSX : Symbol(JSX, Decl(react.d.ts, 2352, 1)) >Element : Symbol(JSX.Element, Decl(react.d.ts, 2355, 27)) declare function OverloadComponent(attr: {b: U, a?: string, "ignore-prop": boolean}): JSX.Element; ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->U : Symbol(U, Decl(file.tsx, 4, 35)) ->attr : Symbol(attr, Decl(file.tsx, 4, 38)) ->b : Symbol(b, Decl(file.tsx, 4, 45)) ->U : Symbol(U, Decl(file.tsx, 4, 35)) ->a : Symbol(a, Decl(file.tsx, 4, 50)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>U : Symbol(U, Decl(file.tsx, 3, 35)) +>attr : Symbol(attr, Decl(file.tsx, 3, 38)) +>b : Symbol(b, Decl(file.tsx, 3, 45)) +>U : Symbol(U, Decl(file.tsx, 3, 35)) +>a : Symbol(a, Decl(file.tsx, 3, 50)) >JSX : Symbol(JSX, Decl(react.d.ts, 2352, 1)) >Element : Symbol(JSX.Element, Decl(react.d.ts, 2355, 27)) declare function OverloadComponent(attr: {b: U, a: T}): JSX.Element; ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->T : Symbol(T, Decl(file.tsx, 5, 35)) ->U : Symbol(U, Decl(file.tsx, 5, 37)) ->attr : Symbol(attr, Decl(file.tsx, 5, 41)) ->b : Symbol(b, Decl(file.tsx, 5, 48)) ->U : Symbol(U, Decl(file.tsx, 5, 37)) ->a : Symbol(a, Decl(file.tsx, 5, 53)) ->T : Symbol(T, Decl(file.tsx, 5, 35)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>T : Symbol(T, Decl(file.tsx, 4, 35)) +>U : Symbol(U, Decl(file.tsx, 4, 37)) +>attr : Symbol(attr, Decl(file.tsx, 4, 41)) +>b : Symbol(b, Decl(file.tsx, 4, 48)) +>U : Symbol(U, Decl(file.tsx, 4, 37)) +>a : Symbol(a, Decl(file.tsx, 4, 53)) +>T : Symbol(T, Decl(file.tsx, 4, 35)) >JSX : Symbol(JSX, Decl(react.d.ts, 2352, 1)) >Element : Symbol(JSX.Element, Decl(react.d.ts, 2355, 27)) // OK function Baz(arg1: T, arg2: U) { ->Baz : Symbol(Baz, Decl(file.tsx, 5, 74)) ->T : Symbol(T, Decl(file.tsx, 8, 13)) ->b : Symbol(b, Decl(file.tsx, 8, 24)) ->U : Symbol(U, Decl(file.tsx, 8, 35)) ->a : Symbol(a, Decl(file.tsx, 8, 47)) ->b : Symbol(b, Decl(file.tsx, 8, 58)) ->arg1 : Symbol(arg1, Decl(file.tsx, 8, 70)) ->T : Symbol(T, Decl(file.tsx, 8, 13)) ->arg2 : Symbol(arg2, Decl(file.tsx, 8, 78)) ->U : Symbol(U, Decl(file.tsx, 8, 35)) +>Baz : Symbol(Baz, Decl(file.tsx, 4, 74)) +>T : Symbol(T, Decl(file.tsx, 7, 13)) +>b : Symbol(b, Decl(file.tsx, 7, 24)) +>U : Symbol(U, Decl(file.tsx, 7, 35)) +>a : Symbol(a, Decl(file.tsx, 7, 47)) +>b : Symbol(b, Decl(file.tsx, 7, 58)) +>arg1 : Symbol(arg1, Decl(file.tsx, 7, 70)) +>T : Symbol(T, Decl(file.tsx, 7, 13)) +>arg2 : Symbol(arg2, Decl(file.tsx, 7, 78)) +>U : Symbol(U, Decl(file.tsx, 7, 35)) let a0 = ; ->a0 : Symbol(a0, Decl(file.tsx, 9, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg1 : Symbol(arg1, Decl(file.tsx, 8, 70)) ->a : Symbol(a, Decl(file.tsx, 9, 41)) ->ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 9, 51)) +>a0 : Symbol(a0, Decl(file.tsx, 8, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg1 : Symbol(arg1, Decl(file.tsx, 7, 70)) +>a : Symbol(a, Decl(file.tsx, 8, 41)) +>ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 8, 51)) let a1 = ; ->a1 : Symbol(a1, Decl(file.tsx, 10, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg2 : Symbol(arg2, Decl(file.tsx, 8, 78)) ->ignore-pro : Symbol(ignore-pro, Decl(file.tsx, 10, 41)) +>a1 : Symbol(a1, Decl(file.tsx, 9, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg2 : Symbol(arg2, Decl(file.tsx, 7, 78)) +>ignore-pro : Symbol(ignore-pro, Decl(file.tsx, 9, 41)) let a2 = ; ->a2 : Symbol(a2, Decl(file.tsx, 11, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg2 : Symbol(arg2, Decl(file.tsx, 8, 78)) +>a2 : Symbol(a2, Decl(file.tsx, 10, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg2 : Symbol(arg2, Decl(file.tsx, 7, 78)) let a3 = ; ->a3 : Symbol(a3, Decl(file.tsx, 12, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg1 : Symbol(arg1, Decl(file.tsx, 8, 70)) ->ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 12, 41)) +>a3 : Symbol(a3, Decl(file.tsx, 11, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg1 : Symbol(arg1, Decl(file.tsx, 7, 70)) +>ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 11, 41)) let a4 = ; ->a4 : Symbol(a4, Decl(file.tsx, 13, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) +>a4 : Symbol(a4, Decl(file.tsx, 12, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) let a5 = ; ->a5 : Symbol(a5, Decl(file.tsx, 14, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg2 : Symbol(arg2, Decl(file.tsx, 8, 78)) ->ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 14, 41)) ->arg1 : Symbol(arg1, Decl(file.tsx, 8, 70)) +>a5 : Symbol(a5, Decl(file.tsx, 13, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg2 : Symbol(arg2, Decl(file.tsx, 7, 78)) +>ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 13, 41)) +>arg1 : Symbol(arg1, Decl(file.tsx, 7, 70)) let a6 = ; ->a6 : Symbol(a6, Decl(file.tsx, 15, 7)) ->OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 1, 31), Decl(file.tsx, 3, 53), Decl(file.tsx, 4, 101)) ->arg2 : Symbol(arg2, Decl(file.tsx, 8, 78)) ->ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 15, 41)) ->arg1 : Symbol(arg1, Decl(file.tsx, 8, 70)) +>a6 : Symbol(a6, Decl(file.tsx, 14, 7)) +>OverloadComponent : Symbol(OverloadComponent, Decl(file.tsx, 0, 31), Decl(file.tsx, 2, 53), Decl(file.tsx, 3, 101)) +>arg2 : Symbol(arg2, Decl(file.tsx, 7, 78)) +>ignore-prop : Symbol(ignore-prop, Decl(file.tsx, 14, 41)) +>arg1 : Symbol(arg1, Decl(file.tsx, 7, 70)) } declare function Link(l: {func: (arg: U)=>void}): JSX.Element; ->Link : Symbol(Link, Decl(file.tsx, 16, 1), Decl(file.tsx, 18, 65)) ->U : Symbol(U, Decl(file.tsx, 18, 22)) ->l : Symbol(l, Decl(file.tsx, 18, 25)) ->func : Symbol(func, Decl(file.tsx, 18, 29)) ->arg : Symbol(arg, Decl(file.tsx, 18, 36)) ->U : Symbol(U, Decl(file.tsx, 18, 22)) +>Link : Symbol(Link, Decl(file.tsx, 15, 1), Decl(file.tsx, 17, 65)) +>U : Symbol(U, Decl(file.tsx, 17, 22)) +>l : Symbol(l, Decl(file.tsx, 17, 25)) +>func : Symbol(func, Decl(file.tsx, 17, 29)) +>arg : Symbol(arg, Decl(file.tsx, 17, 36)) +>U : Symbol(U, Decl(file.tsx, 17, 22)) >JSX : Symbol(JSX, Decl(react.d.ts, 2352, 1)) >Element : Symbol(JSX.Element, Decl(react.d.ts, 2355, 27)) declare function Link(l: {func: (arg1:U, arg2: string)=>void}): JSX.Element; ->Link : Symbol(Link, Decl(file.tsx, 16, 1), Decl(file.tsx, 18, 65)) ->U : Symbol(U, Decl(file.tsx, 19, 22)) ->l : Symbol(l, Decl(file.tsx, 19, 25)) ->func : Symbol(func, Decl(file.tsx, 19, 29)) ->arg1 : Symbol(arg1, Decl(file.tsx, 19, 36)) ->U : Symbol(U, Decl(file.tsx, 19, 22)) ->arg2 : Symbol(arg2, Decl(file.tsx, 19, 43)) +>Link : Symbol(Link, Decl(file.tsx, 15, 1), Decl(file.tsx, 17, 65)) +>U : Symbol(U, Decl(file.tsx, 18, 22)) +>l : Symbol(l, Decl(file.tsx, 18, 25)) +>func : Symbol(func, Decl(file.tsx, 18, 29)) +>arg1 : Symbol(arg1, Decl(file.tsx, 18, 36)) +>U : Symbol(U, Decl(file.tsx, 18, 22)) +>arg2 : Symbol(arg2, Decl(file.tsx, 18, 43)) >JSX : Symbol(JSX, Decl(react.d.ts, 2352, 1)) >Element : Symbol(JSX.Element, Decl(react.d.ts, 2355, 27)) function createLink(func: (a: number)=>void) { ->createLink : Symbol(createLink, Decl(file.tsx, 19, 79)) ->func : Symbol(func, Decl(file.tsx, 20, 20)) ->a : Symbol(a, Decl(file.tsx, 20, 27)) +>createLink : Symbol(createLink, Decl(file.tsx, 18, 79)) +>func : Symbol(func, Decl(file.tsx, 19, 20)) +>a : Symbol(a, Decl(file.tsx, 19, 27)) let o = ->o : Symbol(o, Decl(file.tsx, 21, 7)) ->Link : Symbol(Link, Decl(file.tsx, 16, 1), Decl(file.tsx, 18, 65)) ->func : Symbol(func, Decl(file.tsx, 21, 17)) ->func : Symbol(func, Decl(file.tsx, 20, 20)) +>o : Symbol(o, Decl(file.tsx, 20, 7)) +>Link : Symbol(Link, Decl(file.tsx, 15, 1), Decl(file.tsx, 17, 65)) +>func : Symbol(func, Decl(file.tsx, 20, 17)) +>func : Symbol(func, Decl(file.tsx, 19, 20)) let o1 = {}} />; ->o1 : Symbol(o1, Decl(file.tsx, 22, 7)) ->Link : Symbol(Link, Decl(file.tsx, 16, 1), Decl(file.tsx, 18, 65)) ->func : Symbol(func, Decl(file.tsx, 22, 18)) ->a : Symbol(a, Decl(file.tsx, 22, 26)) ->b : Symbol(b, Decl(file.tsx, 22, 35)) +>o1 : Symbol(o1, Decl(file.tsx, 21, 7)) +>Link : Symbol(Link, Decl(file.tsx, 15, 1), Decl(file.tsx, 17, 65)) +>func : Symbol(func, Decl(file.tsx, 21, 18)) +>a : Symbol(a, Decl(file.tsx, 21, 26)) +>b : Symbol(b, Decl(file.tsx, 21, 35)) } diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types index f85638d0edd..aa38d2ccf8a 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments3.types @@ -1,5 +1,4 @@ === tests/cases/conformance/jsx/file.tsx === - import React = require('react') >React : typeof React @@ -131,8 +130,8 @@ function createLink(func: (a: number)=>void) { >o1 : JSX.Element >{}} /> : JSX.Element >Link : { (l: { func: (arg: U) => void; }): JSX.Element; (l: { func: (arg1: U, arg2: string) => void; }): JSX.Element; } ->func : (a: number, b: string) => void ->(a:number, b:string)=>{} : (a: number, b: string) => void +>func : (a: number, b: string) => any +>(a:number, b:string)=>{} : (a: number, b: string) => any >a : number >b : string } diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments4.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments4.errors.txt index 7988bbdf414..d9b50ef31c6 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments4.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments4.errors.txt @@ -1,7 +1,9 @@ tests/cases/conformance/jsx/file.tsx(9,33): error TS2322: Type '{ a: number; }' is not assignable to type 'IntrinsicAttributes & { b: {}; a: number; }'. Type '{ a: number; }' is not assignable to type '{ b: {}; a: number; }'. Property 'b' is missing in type '{ a: number; }'. -tests/cases/conformance/jsx/file.tsx(10,33): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(10,33): error TS2322: Type '{ b: number; }' is not assignable to type 'IntrinsicAttributes & { b: number; a: {}; }'. + Type '{ b: number; }' is not assignable to type '{ b: number; a: {}; }'. + Property 'a' is missing in type '{ b: number; }'. ==== tests/cases/conformance/jsx/file.tsx (2 errors) ==== @@ -19,6 +21,8 @@ tests/cases/conformance/jsx/file.tsx(10,33): error TS2698: Spread types may only !!! error TS2322: Type '{ a: number; }' is not assignable to type '{ b: {}; a: number; }'. !!! error TS2322: Property 'b' is missing in type '{ a: number; }'. let a2 = // missing a - ~~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2322: Type '{ b: number; }' is not assignable to type 'IntrinsicAttributes & { b: number; a: {}; }'. +!!! error TS2322: Type '{ b: number; }' is not assignable to type '{ b: number; a: {}; }'. +!!! error TS2322: Property 'a' is missing in type '{ b: number; }'. } \ No newline at end of file diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt index 314f8b6cdad..3f5623921fd 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt @@ -1,37 +1,24 @@ -tests/cases/conformance/jsx/file.tsx(6,25): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(7,25): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(15,33): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(16,34): error TS2698: Spread types may only be created from object types. -tests/cases/conformance/jsx/file.tsx(17,33): error TS2698: Spread types may only be created from object types. +tests/cases/conformance/jsx/file.tsx(16,42): error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes & { prop: number; }'. -==== tests/cases/conformance/jsx/file.tsx (5 errors) ==== +==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== import React = require('react') - // Error, can only spread object type declare function Component(l: U): JSX.Element; function createComponent(arg: T) { - let a1 = ; - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. + // let a1 = ; let a2 = ; - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. } declare function ComponentSpecific(l: { prop: U }): JSX.Element; declare function ComponentSpecific1(l: { prop: U, "ignore-prop": number }): JSX.Element; - // Error, can only spread object type function Bar(arg: T) { let a1 = ; // U is number - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. let a2 = ; // U is number - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. let a3 = ; // U is "hello" - ~~~~~~~~ -!!! error TS2698: Spread types may only be created from object types. + let a4 = ; // U is "hello" + ~~~~~~~~~~~~~ +!!! error TS2339: Property 'prop1' does not exist on type 'IntrinsicAttributes & { prop: number; }'. } \ No newline at end of file diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js index b5e215dada3..e77e79ee732 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js @@ -1,21 +1,20 @@ //// [file.tsx] import React = require('react') -// Error, can only spread object type declare function Component(l: U): JSX.Element; function createComponent(arg: T) { - let a1 = ; + // let a1 = ; let a2 = ; } declare function ComponentSpecific(l: { prop: U }): JSX.Element; declare function ComponentSpecific1(l: { prop: U, "ignore-prop": number }): JSX.Element; -// Error, can only spread object type function Bar(arg: T) { let a1 = ; // U is number let a2 = ; // U is number let a3 = ; // U is "hello" + let a4 = ; // U is "hello" } @@ -24,13 +23,13 @@ define(["require", "exports", "react"], function (require, exports, React) { "use strict"; exports.__esModule = true; function createComponent(arg) { - var a1 = ; + // let a1 = ; var a2 = ; } - // Error, can only spread object type function Bar(arg) { var a1 = ; // U is number var a2 = ; // U is number var a3 = ; // U is "hello" + var a4 = ; // U is "hello" } }); diff --git a/tests/cases/conformance/jsx/tsxStatelessFunctionComponentsWithTypeArguments5.tsx b/tests/cases/conformance/jsx/tsxStatelessFunctionComponentsWithTypeArguments5.tsx index 527eb689ddb..c19bfdf43bd 100644 --- a/tests/cases/conformance/jsx/tsxStatelessFunctionComponentsWithTypeArguments5.tsx +++ b/tests/cases/conformance/jsx/tsxStatelessFunctionComponentsWithTypeArguments5.tsx @@ -6,7 +6,6 @@ import React = require('react') -// Error, can only spread object type declare function Component(l: U): JSX.Element; function createComponent(arg: T) { let a1 = ; @@ -16,9 +15,9 @@ function createComponent(arg: T) { declare function ComponentSpecific(l: { prop: U }): JSX.Element; declare function ComponentSpecific1(l: { prop: U, "ignore-prop": number }): JSX.Element; -// Error, can only spread object type function Bar(arg: T) { let a1 = ; // U is number let a2 = ; // U is number let a3 = ; // U is "hello" + let a4 = ; // U is "hello" } From 73a944711f01be6a8dd8af140122d26ac5427751 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Mon, 8 May 2017 13:49:53 -0700 Subject: [PATCH 81/92] Remove checks for `symbol.declarations` --- src/services/findAllReferences.ts | 14 +------------- tests/cases/fourslash/findAllRefsMappedType.ts | 7 ++++++- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 8dbbe3b1547..40572b11d34 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -108,10 +108,6 @@ namespace ts.FindAllReferences { switch (def.type) { case "symbol": { const { symbol, node } = def; - const declarations = symbol.declarations; - if (!declarations || declarations.length === 0) { - return undefined; - } const { displayParts, kind } = getDefinitionKindAndDisplayParts(symbol, node, checker); const name = displayParts.map(p => p.text).join(""); return { node, name, kind, displayParts }; @@ -273,7 +269,7 @@ namespace ts.FindAllReferences.Core { } } - let symbol = checker.getSymbolAtLocation(node); + const symbol = checker.getSymbolAtLocation(node); // Could not find a symbol e.g. unknown identifier if (!symbol) { @@ -285,14 +281,6 @@ namespace ts.FindAllReferences.Core { return undefined; } - // If this property is derived from another one, find references on the original property instead. - symbol = (symbol as ts.SymbolLinks).syntheticOrigin || symbol; - - // The symbol was an internal symbol and does not have a declaration e.g. undefined symbol - if (!symbol.declarations || !symbol.declarations.length) { - return undefined; - } - return getReferencedSymbolsForSymbol(symbol, node, sourceFiles, checker, cancellationToken, options); } diff --git a/tests/cases/fourslash/findAllRefsMappedType.ts b/tests/cases/fourslash/findAllRefsMappedType.ts index 97658da08c1..7daf0296d94 100644 --- a/tests/cases/fourslash/findAllRefsMappedType.ts +++ b/tests/cases/fourslash/findAllRefsMappedType.ts @@ -7,4 +7,9 @@ ////declare const u: U; ////u.[|a|]; -verify.singleReferenceGroup("(property) T.a: number"); +const ranges = test.ranges(); +const [r0, r1, r2] = ranges; +verify.referenceGroups([r0, r1], [{ definition: "(property) T.a: number", ranges }]); +verify.referenceGroups(r2, [ + { definition: "(property) T.a: number", ranges: [r0, r1] }, + { definition: "(property) a: string", ranges: [r2] }]); From dd94ad239abaafb9a4524bb8a437d55189b3807f Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 14:16:53 -0700 Subject: [PATCH 82/92] Revert "Turn ClassElement and TypeElement into unions too" This reverts commit 22f353ac940bfd4e170d9e56a094fdd385476191. --- src/compiler/types.ts | 75 +++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4ec5c0f97bf..043c8b9a0b1 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -616,6 +616,7 @@ namespace ts { | CallExpression | CallSignatureDeclaration | ClassDeclaration + | ClassElement | ClassExpression | ClassLikeDeclaration | ConstructSignatureDeclaration @@ -716,14 +717,13 @@ namespace ts { typeParameters?: NodeArray; parameters: NodeArray; type?: TypeNode; - questionToken?: QuestionToken; } - export interface CallSignatureDeclaration extends SignatureDeclaration { + export interface CallSignatureDeclaration extends SignatureDeclaration, TypeElement { kind: SyntaxKind.CallSignature; } - export interface ConstructSignatureDeclaration extends SignatureDeclaration { + export interface ConstructSignatureDeclaration extends SignatureDeclaration, TypeElement { kind: SyntaxKind.ConstructSignature; } @@ -762,7 +762,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface PropertySignature extends DeclarationBase { + export interface PropertySignature extends TypeElement { kind: SyntaxKind.PropertySignature | SyntaxKind.JSDocRecordMember; name: PropertyName; // Declared property name questionToken?: QuestionToken; // Present on optional property @@ -770,7 +770,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface PropertyDeclaration extends DeclarationBase { + export interface PropertyDeclaration extends ClassElement { kind: SyntaxKind.PropertyDeclaration; questionToken?: QuestionToken; // Present for use with reporting a grammar error name: PropertyName; @@ -876,7 +876,7 @@ namespace ts { body?: FunctionBody; } - export interface MethodSignature extends SignatureDeclaration { + export interface MethodSignature extends SignatureDeclaration, TypeElement { kind: SyntaxKind.MethodSignature; name: PropertyName; } @@ -890,28 +890,27 @@ namespace ts { // Because of this, it may be necessary to determine what sort of MethodDeclaration you have // at later stages of the compiler pipeline. In that case, you can either check the parent kind // of the method, or use helpers like isObjectLiteralMethodDeclaration - export interface MethodDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { + export interface MethodDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { kind: SyntaxKind.MethodDeclaration; name: PropertyName; body?: FunctionBody; } - export interface ConstructorDeclaration extends FunctionLikeDeclaration { + export interface ConstructorDeclaration extends FunctionLikeDeclaration, ClassElement { kind: SyntaxKind.Constructor; parent?: ClassDeclaration | ClassExpression; body?: FunctionBody; } /** For when we encounter a semicolon in a class declaration. ES6 allows these as class elements. */ - export interface SemicolonClassElement extends DeclarationBase { + export interface SemicolonClassElement extends ClassElement { kind: SyntaxKind.SemicolonClassElement; parent?: ClassDeclaration | ClassExpression; - name?: PropertyName; } // See the comment on MethodDeclaration for the intuition behind GetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface GetAccessorDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { + export interface GetAccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { kind: SyntaxKind.GetAccessor; parent?: ClassDeclaration | ClassExpression | ObjectLiteralExpression; name: PropertyName; @@ -920,7 +919,7 @@ namespace ts { // See the comment on MethodDeclaration for the intuition behind SetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface SetAccessorDeclaration extends FunctionLikeDeclaration, ObjectLiteralElement { + export interface SetAccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { kind: SyntaxKind.SetAccessor; parent?: ClassDeclaration | ClassExpression | ObjectLiteralExpression; name: PropertyName; @@ -929,7 +928,7 @@ namespace ts { export type AccessorDeclaration = GetAccessorDeclaration | SetAccessorDeclaration; - export interface IndexSignatureDeclaration extends SignatureDeclaration { + export interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement, TypeElement { kind: SyntaxKind.IndexSignature; parent?: ClassDeclaration | ClassExpression | InterfaceDeclaration | TypeLiteralNode; } @@ -1696,7 +1695,7 @@ namespace ts { kind: SyntaxKind.DebuggerStatement; } - export interface MissingDeclaration extends DeclarationStatement, ObjectLiteralElement { + export interface MissingDeclaration extends DeclarationStatement, ClassElement, ObjectLiteralElement, TypeElement { kind: SyntaxKind.MissingDeclaration; name?: Identifier; } @@ -1864,26 +1863,34 @@ namespace ts { kind: SyntaxKind.ClassExpression; } - export type ClassElement = - | PropertyDeclaration - | MethodDeclaration - | ConstructorDeclaration - | SemicolonClassElement - | GetAccessorDeclaration - | SetAccessorDeclaration - | IndexSignatureDeclaration - | MissingDeclaration; + export interface ClassElement extends DeclarationBase { + kind: + | SyntaxKind.PropertyDeclaration + | SyntaxKind.MethodDeclaration + | SyntaxKind.Constructor + | SyntaxKind.SemicolonClassElement + | SyntaxKind.GetAccessor + | SyntaxKind.SetAccessor + | SyntaxKind.IndexSignature + | SyntaxKind.MissingDeclaration; + _classElementBrand: any; + name?: PropertyName; + } - export type TypeElement = - | CallSignatureDeclaration - | ConstructSignatureDeclaration - | PropertySignature - | MethodSignature - | IndexSignatureDeclaration - | MissingDeclaration - | IndexSignatureDeclaration - | JSDocPropertyTag - | JSDocRecordMember; + export interface TypeElement extends DeclarationBase { + kind: + | SyntaxKind.CallSignature + | SyntaxKind.ConstructSignature + | SyntaxKind.PropertySignature + | SyntaxKind.MethodSignature + | SyntaxKind.IndexSignature + | SyntaxKind.MissingDeclaration + | SyntaxKind.JSDocPropertyTag + | SyntaxKind.JSDocRecordMember; + _typeElementBrand: any; + name?: PropertyName; + questionToken?: QuestionToken; + } export interface InterfaceDeclaration extends DeclarationStatement { kind: SyntaxKind.InterfaceDeclaration; @@ -2217,7 +2224,7 @@ namespace ts { jsDocTypeLiteral?: JSDocTypeLiteral; } - export interface JSDocPropertyTag extends JSDocTag { + export interface JSDocPropertyTag extends JSDocTag, TypeElement { kind: SyntaxKind.JSDocPropertyTag; name: Identifier; typeExpression: JSDocTypeExpression; From e81733b82723dac1f853edec8ea8d8c4c6fc48a5 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 14:17:11 -0700 Subject: [PATCH 83/92] Revert "Fix lint" This reverts commit b39c319f0c4ee9b460ed51eba77e8c0958896c80. --- src/compiler/types.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 043c8b9a0b1..de71fbfdabe 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -711,7 +711,7 @@ namespace ts { | SyntaxKind.SetAccessor | SyntaxKind.Constructor | SyntaxKind.ArrowFunction - | SyntaxKind.FunctionExpression; + | SyntaxKind.FunctionExpression name?: PropertyName; typeParameters?: NodeArray; @@ -814,8 +814,9 @@ namespace ts { } /** - * There aren't any explicit subtypes of VariableLikeDeclaration, + * There aren't any explicit subtypes of VariableLikeDeclaration; * it's just structurally relatable to a number of types. + * (Maybe it should be an intersection of the below types.) */ export interface VariableLikeDeclaration extends DeclarationBase { kind: From acec74b1afc93bba32ac44afc0c6aa8fc12e2807 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 14:24:45 -0700 Subject: [PATCH 84/92] Revert "Convert `Declaration` to union, not type hierarchy" This reverts commit 573040f0cfa713929bfa1fe84f4fd2a81cc82658. --- src/compiler/binder.ts | 6 +- src/compiler/checker.ts | 20 +-- src/compiler/transformers/es2015.ts | 2 +- src/compiler/types.ts | 182 ++++++---------------------- src/compiler/utilities.ts | 9 +- 5 files changed, 58 insertions(+), 161 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 8506378e216..38cb93bff7e 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -304,7 +304,7 @@ namespace ts { } function getDisplayName(node: Declaration): string { - return (node as DeclarationBase).name ? declarationNameToString((node as DeclarationBase).name) : getDeclarationName(node); + return (node as RealDeclaration).name ? declarationNameToString((node as RealDeclaration).name) : getDeclarationName(node); } /** @@ -367,8 +367,8 @@ namespace ts { symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name)); } else { - if ((node as DeclarationBase).name) { - (node as DeclarationBase).name.parent = node; + if ((node as RealDeclaration).name) { + (node as RealDeclaration).name.parent = node; } // Report errors every position with duplicate declaration diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index aea175ac8b1..f7d7a79f9a0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3621,7 +3621,7 @@ namespace ts { }); } - function isDeclarationVisible(node: Node): boolean { + function isDeclarationVisible(node: Declaration): boolean { if (node) { const links = getNodeLinks(node); if (links.isVisible === undefined) { @@ -3635,10 +3635,10 @@ namespace ts { function determineIfDeclarationIsVisible() { switch (node.kind) { case SyntaxKind.BindingElement: - return isDeclarationVisible(node.parent.parent); + return isDeclarationVisible(node.parent.parent); case SyntaxKind.VariableDeclaration: - const declaration = node as VariableDeclaration; - if (isBindingPattern(declaration.name) && !declaration.name.elements.length) { + if (isBindingPattern(node.name) && + !(node.name).elements.length) { // If the binding pattern is empty, this variable declaration is not visible return false; } @@ -3661,7 +3661,7 @@ namespace ts { return isGlobalSourceFile(parent); } // Exported members/ambient module elements (exception import declaration) are visible if parent is visible - return isDeclarationVisible(parent); + return isDeclarationVisible(parent); case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertySignature: @@ -3691,7 +3691,7 @@ namespace ts { case SyntaxKind.UnionType: case SyntaxKind.IntersectionType: case SyntaxKind.ParenthesizedType: - return isDeclarationVisible(node.parent); + return isDeclarationVisible(node.parent); // Default binding, import specifier and namespace import is visible // only on demand so by default it is not visible @@ -6236,8 +6236,8 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return (node).name.kind === SyntaxKind.ComputedPropertyName - && traverse((node).name); + return (node).name.kind === SyntaxKind.ComputedPropertyName + && traverse((node).name); default: return !nodeStartsNewLexicalEnvironment(node) && !isPartOfTypeNode(node) && forEachChild(node, traverse); @@ -21909,7 +21909,7 @@ namespace ts { function isTypeDeclarationName(name: Node): boolean { return name.kind === SyntaxKind.Identifier && isTypeDeclaration(name.parent) && - (name.parent).name === name; + (name.parent).name === name; } function isTypeDeclaration(node: Node): boolean { @@ -22537,7 +22537,7 @@ namespace ts { // Return true if the given node is a declaration of a nested block scoped entity with a name that either hides an // existing name or might hide a name when compiled downlevel - function isDeclarationWithCollidingName(node: Node): boolean { + function isDeclarationWithCollidingName(node: Declaration): boolean { node = getParseTreeNode(node, isDeclaration); if (node) { const symbol = getSymbolOfNode(node); diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 4165b0679e1..188da04b36c 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -3748,7 +3748,7 @@ namespace ts { case SyntaxKind.ClassDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.VariableDeclaration: - return (parent).name === node + return (parent).name === node && resolver.isDeclarationWithCollidingName(parent); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index de71fbfdabe..51e9d6717ee 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -603,75 +603,15 @@ namespace ts { export type DeclarationName = Identifier | StringLiteral | NumericLiteral | ComputedPropertyName | BindingPattern; - export interface DeclarationBase extends Node { + export interface RealDeclaration extends Node { _declarationBrand: any; name?: DeclarationName; } - export type Declaration = - | ArrowFunction - // Binary expressions can be declarations if they are 'exports.foo = bar' expressions in JS files - | BinaryExpression - | BindingElement - | CallExpression - | CallSignatureDeclaration - | ClassDeclaration - | ClassElement - | ClassExpression - | ClassLikeDeclaration - | ConstructSignatureDeclaration - | ConstructorDeclaration - | ConstructorTypeNode - | EnumDeclaration - | EnumMember - | ExportAssignment - | ExportDeclaration - | ExportSpecifier - | FunctionDeclaration - | FunctionExpression - | FunctionTypeNode - | GetAccessorDeclaration - | ImportClause - | ImportEqualsDeclaration - | ImportSpecifier - | IndexSignatureDeclaration - | InterfaceDeclaration - | JSDocFunctionType - | JSDocNamespaceDeclaration - | JSDocPropertyTag - | JSDocTypedefTag - | JsxAttribute - | JsxAttributes - | JsxSpreadAttribute - | MappedTypeNode - | MethodDeclaration - | MethodSignature - | MissingDeclaration - | ModuleDeclaration - | NamespaceDeclaration - | NamespaceExportDeclaration - | NamespaceImport - | NewExpression - | ObjectLiteralExpression - | ParameterDeclaration - | PropertyAccessExpression - | PropertyAssignment - | PropertyDeclaration - | PropertySignature - | SemicolonClassElement - | SetAccessorDeclaration - | ShorthandPropertyAssignment - | SignatureDeclaration - | SourceFile - | SpreadAssignment - | TypeAliasDeclaration - | TypeElement - | TypeLiteralNode - | TypeParameterDeclaration - | VariableDeclaration - | VariableLikeDeclaration; + // Binary expressions can be declarations if they are 'exports.foo = bar' expressions in JS files + export type Declaration = RealDeclaration | BinaryExpression; - export interface DeclarationStatement extends DeclarationBase, Statement { + export interface DeclarationStatement extends RealDeclaration, Statement { name?: Identifier | StringLiteral | NumericLiteral; } @@ -685,7 +625,7 @@ namespace ts { expression: LeftHandSideExpression; } - export interface TypeParameterDeclaration extends DeclarationBase { + export interface TypeParameterDeclaration extends RealDeclaration { kind: SyntaxKind.TypeParameter; parent?: DeclarationWithTypeParameters; name: Identifier; @@ -696,23 +636,7 @@ namespace ts { expression?: Expression; } - export interface SignatureDeclaration extends DeclarationBase { - kind: - | SyntaxKind.CallSignature - | SyntaxKind.ConstructSignature - | SyntaxKind.ConstructorType - | SyntaxKind.MethodSignature - | SyntaxKind.IndexSignature - | SyntaxKind.FunctionType - | SyntaxKind.JSDocFunctionType - | SyntaxKind.FunctionDeclaration - | SyntaxKind.MethodDeclaration - | SyntaxKind.GetAccessor - | SyntaxKind.SetAccessor - | SyntaxKind.Constructor - | SyntaxKind.ArrowFunction - | SyntaxKind.FunctionExpression - + export interface SignatureDeclaration extends RealDeclaration { name?: PropertyName; typeParameters?: NodeArray; parameters: NodeArray; @@ -729,7 +653,7 @@ namespace ts { export type BindingName = Identifier | BindingPattern; - export interface VariableDeclaration extends DeclarationBase { + export interface VariableDeclaration extends RealDeclaration { kind: SyntaxKind.VariableDeclaration; parent?: VariableDeclarationList | CatchClause; name: BindingName; // Declared variable name @@ -743,7 +667,7 @@ namespace ts { declarations: NodeArray; } - export interface ParameterDeclaration extends DeclarationBase { + export interface ParameterDeclaration extends RealDeclaration { kind: SyntaxKind.Parameter; parent?: SignatureDeclaration; dotDotDotToken?: DotDotDotToken; // Present on rest parameter @@ -753,7 +677,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface BindingElement extends DeclarationBase { + export interface BindingElement extends RealDeclaration { kind: SyntaxKind.BindingElement; parent?: BindingPattern; propertyName?: PropertyName; // Binding property name (in object binding pattern) @@ -778,7 +702,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface ObjectLiteralElement extends DeclarationBase { + export interface ObjectLiteralElement extends RealDeclaration { _objectLiteralBrandBrand: any; name?: PropertyName; } @@ -813,24 +737,16 @@ namespace ts { expression: Expression; } - /** - * There aren't any explicit subtypes of VariableLikeDeclaration; - * it's just structurally relatable to a number of types. - * (Maybe it should be an intersection of the below types.) - */ - export interface VariableLikeDeclaration extends DeclarationBase { - kind: - | SyntaxKind.VariableDeclaration - | SyntaxKind.Parameter - | SyntaxKind.BindingElement - | SyntaxKind.PropertyAssignment - | SyntaxKind.PropertyDeclaration - | SyntaxKind.PropertySignature - | SyntaxKind.JsxAttribute - | SyntaxKind.ShorthandPropertyAssignment - | SyntaxKind.EnumMember - | SyntaxKind.JSDocPropertyTag - | SyntaxKind.JSDocRecordMember; + // SyntaxKind.VariableDeclaration + // SyntaxKind.Parameter + // SyntaxKind.BindingElement + // SyntaxKind.Property + // SyntaxKind.PropertyAssignment + // SyntaxKind.JsxAttribute + // SyntaxKind.ShorthandPropertyAssignment + // SyntaxKind.EnumMember + // SyntaxKind.JSDocPropertyTag + export interface VariableLikeDeclaration extends RealDeclaration { propertyName?: PropertyName; dotDotDotToken?: DotDotDotToken; name: DeclarationName; @@ -839,6 +755,10 @@ namespace ts { initializer?: Expression; } + export interface PropertyLikeDeclaration extends RealDeclaration { + name: PropertyName; + } + export interface ObjectBindingPattern extends Node { kind: SyntaxKind.ObjectBindingPattern; parent?: VariableDeclaration | ParameterDeclaration | BindingElement; @@ -984,7 +904,7 @@ namespace ts { } // A TypeLiteral is the declaration node for an anonymous symbol. - export interface TypeLiteralNode extends TypeNode, DeclarationBase { + export interface TypeLiteralNode extends TypeNode, RealDeclaration { kind: SyntaxKind.TypeLiteral; members: NodeArray; } @@ -1028,7 +948,7 @@ namespace ts { indexType: TypeNode; } - export interface MappedTypeNode extends TypeNode, DeclarationBase { + export interface MappedTypeNode extends TypeNode, RealDeclaration { kind: SyntaxKind.MappedType; parent?: TypeAliasDeclaration; readonlyToken?: ReadonlyToken; @@ -1485,7 +1405,7 @@ namespace ts { * JSXAttribute or JSXSpreadAttribute. ObjectLiteralExpression, on the other hand, can only have properties of type * ObjectLiteralElement (e.g. PropertyAssignment, ShorthandPropertyAssignment etc.) */ - export interface ObjectLiteralExpressionBase extends PrimaryExpression, DeclarationBase { + export interface ObjectLiteralExpressionBase extends PrimaryExpression, RealDeclaration { properties: NodeArray; } @@ -1499,7 +1419,7 @@ namespace ts { export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression; export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression; - export interface PropertyAccessExpression extends MemberExpression, DeclarationBase { + export interface PropertyAccessExpression extends MemberExpression, RealDeclaration { kind: SyntaxKind.PropertyAccessExpression; expression: LeftHandSideExpression; name: Identifier; @@ -1531,7 +1451,7 @@ namespace ts { | SuperElementAccessExpression ; - export interface CallExpression extends LeftHandSideExpression, DeclarationBase { + export interface CallExpression extends LeftHandSideExpression, RealDeclaration { kind: SyntaxKind.CallExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1550,7 +1470,7 @@ namespace ts { typeArguments?: NodeArray; } - export interface NewExpression extends PrimaryExpression, DeclarationBase { + export interface NewExpression extends PrimaryExpression, RealDeclaration { kind: SyntaxKind.NewExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1608,7 +1528,6 @@ namespace ts { export type JsxTagNameExpression = PrimaryExpression | PropertyAccessExpression; export interface JsxAttributes extends ObjectLiteralExpressionBase { - kind: SyntaxKind.JsxAttributes; parent?: JsxOpeningLikeElement; } @@ -1845,10 +1764,7 @@ namespace ts { export type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration; - export interface ClassLikeDeclaration extends DeclarationBase { - kind: - | SyntaxKind.ClassDeclaration - | SyntaxKind.ClassExpression; + export interface ClassLikeDeclaration extends RealDeclaration { name?: Identifier; typeParameters?: NodeArray; heritageClauses?: NodeArray; @@ -1864,30 +1780,12 @@ namespace ts { kind: SyntaxKind.ClassExpression; } - export interface ClassElement extends DeclarationBase { - kind: - | SyntaxKind.PropertyDeclaration - | SyntaxKind.MethodDeclaration - | SyntaxKind.Constructor - | SyntaxKind.SemicolonClassElement - | SyntaxKind.GetAccessor - | SyntaxKind.SetAccessor - | SyntaxKind.IndexSignature - | SyntaxKind.MissingDeclaration; + export interface ClassElement extends RealDeclaration { _classElementBrand: any; name?: PropertyName; } - export interface TypeElement extends DeclarationBase { - kind: - | SyntaxKind.CallSignature - | SyntaxKind.ConstructSignature - | SyntaxKind.PropertySignature - | SyntaxKind.MethodSignature - | SyntaxKind.IndexSignature - | SyntaxKind.MissingDeclaration - | SyntaxKind.JSDocPropertyTag - | SyntaxKind.JSDocRecordMember; + export interface TypeElement extends RealDeclaration { _typeElementBrand: any; name?: PropertyName; questionToken?: QuestionToken; @@ -1915,7 +1813,7 @@ namespace ts { type: TypeNode; } - export interface EnumMember extends DeclarationBase { + export interface EnumMember extends RealDeclaration { kind: SyntaxKind.EnumMember; parent?: EnumDeclaration; // This does include ComputedPropertyName, but the parser will give an error @@ -2004,14 +1902,14 @@ namespace ts { // import d, * as ns from "mod" => name = d, namedBinding: NamespaceImport = { name: ns } // import { a, b as x } from "mod" => name = undefined, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} // import d, { a, b as x } from "mod" => name = d, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} - export interface ImportClause extends DeclarationBase { + export interface ImportClause extends RealDeclaration { kind: SyntaxKind.ImportClause; parent?: ImportDeclaration; name?: Identifier; // Default binding namedBindings?: NamedImportBindings; } - export interface NamespaceImport extends DeclarationBase { + export interface NamespaceImport extends RealDeclaration { kind: SyntaxKind.NamespaceImport; parent?: ImportClause; name: Identifier; @@ -2044,14 +1942,14 @@ namespace ts { export type NamedImportsOrExports = NamedImports | NamedExports; - export interface ImportSpecifier extends DeclarationBase { + export interface ImportSpecifier extends RealDeclaration { kind: SyntaxKind.ImportSpecifier; parent?: NamedImports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) name: Identifier; // Declared name } - export interface ExportSpecifier extends DeclarationBase { + export interface ExportSpecifier extends RealDeclaration { kind: SyntaxKind.ExportSpecifier; parent?: NamedExports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) @@ -2217,7 +2115,7 @@ namespace ts { typeExpression: JSDocTypeExpression; } - export interface JSDocTypedefTag extends JSDocTag, DeclarationBase { + export interface JSDocTypedefTag extends JSDocTag, RealDeclaration { kind: SyntaxKind.JSDocTypedefTag; fullName?: JSDocNamespaceDeclaration | Identifier; name?: Identifier; @@ -2351,7 +2249,7 @@ namespace ts { // Source files are declarations when they are external modules. - export interface SourceFile extends DeclarationBase { + export interface SourceFile extends RealDeclaration { kind: SyntaxKind.SourceFile; statements: NodeArray; endOfFileToken: Token; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 7b92dbf68b5..a3525ee0a70 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -566,7 +566,7 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.TypeAliasDeclaration: - errorNode = (node).name; + errorNode = (node).name; break; case SyntaxKind.ArrowFunction: return getErrorSpanForArrowFunction(sourceFile, node); @@ -1781,7 +1781,7 @@ namespace ts { return undefined; } if (declaration.kind === SyntaxKind.BinaryExpression) { - const kind = getSpecialPropertyAssignmentKind(declaration); + const kind = getSpecialPropertyAssignmentKind(declaration as BinaryExpression); const lhs = (declaration as BinaryExpression).left; switch (kind) { case SpecialPropertyAssignmentKind.None: @@ -1806,7 +1806,6 @@ namespace ts { } } - export function isLiteralComputedPropertyDeclarationName(node: Node) { return (node.kind === SyntaxKind.StringLiteral || node.kind === SyntaxKind.NumericLiteral) && node.parent.kind === SyntaxKind.ComputedPropertyName && @@ -1827,7 +1826,7 @@ namespace ts { case SyntaxKind.PropertyAssignment: case SyntaxKind.PropertyAccessExpression: // Name in member declaration or property name in property access - return (parent).name === node; + return (parent).name === node; case SyntaxKind.QualifiedName: // Name on right hand side of dot in a type query if ((parent).right === node) { @@ -4103,7 +4102,7 @@ namespace ts { || kind === SyntaxKind.MergeDeclarationMarker; } - export function isDeclaration(node: Node): node is DeclarationBase { + export function isDeclaration(node: Node): node is RealDeclaration { return isDeclarationKind(node.kind); } From 9392342f7807c28738199ce82c73e52ac3bc73ef Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 8 May 2017 15:07:50 -0700 Subject: [PATCH 85/92] Switch to Declaration/NamedDeclaration hierarchy --- src/compiler/binder.ts | 12 +++--- src/compiler/checker.ts | 12 +++--- src/compiler/transformers/es2015.ts | 2 +- src/compiler/types.ts | 60 ++++++++++++++--------------- src/compiler/utilities.ts | 10 ++--- src/services/completions.ts | 2 +- src/services/navigateTo.ts | 2 +- 7 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 38cb93bff7e..b6074162fff 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -304,7 +304,7 @@ namespace ts { } function getDisplayName(node: Declaration): string { - return (node as RealDeclaration).name ? declarationNameToString((node as RealDeclaration).name) : getDeclarationName(node); + return (node as NamedDeclaration).name ? declarationNameToString((node as NamedDeclaration).name) : getDeclarationName(node); } /** @@ -367,8 +367,8 @@ namespace ts { symbolTable.set(name, symbol = createSymbol(SymbolFlags.None, name)); } else { - if ((node as RealDeclaration).name) { - (node as RealDeclaration).name.parent = node; + if ((node as NamedDeclaration).name) { + (node as NamedDeclaration).name.parent = node; } // Report errors every position with duplicate declaration @@ -440,9 +440,9 @@ namespace ts { // and this case is specially handled. Module augmentations should only be merged with original module definition // and should never be merged directly with other augmentation, and the latter case would be possible if automatic merge is allowed. const isJSDocTypedefInJSDocNamespace = node.kind === SyntaxKind.JSDocTypedefTag && - node.name && - node.name.kind === SyntaxKind.Identifier && - (node.name).isInJSDocNamespace; + (node as JSDocTypedefTag).name && + (node as JSDocTypedefTag).name.kind === SyntaxKind.Identifier && + ((node as JSDocTypedefTag).name as Identifier).isInJSDocNamespace; if ((!isAmbientModule(node) && (hasExportModifier || container.flags & NodeFlags.ExportContext)) || isJSDocTypedefInJSDocNamespace) { const exportKind = (symbolFlags & SymbolFlags.Value ? SymbolFlags.ExportValue : 0) | diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f7d7a79f9a0..76a1616ce3d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3637,8 +3637,8 @@ namespace ts { case SyntaxKind.BindingElement: return isDeclarationVisible(node.parent.parent); case SyntaxKind.VariableDeclaration: - if (isBindingPattern(node.name) && - !(node.name).elements.length) { + if (isBindingPattern((node as VariableDeclaration).name) && + !((node as VariableDeclaration).name as BindingPattern).elements.length) { // If the binding pattern is empty, this variable declaration is not visible return false; } @@ -6236,8 +6236,8 @@ namespace ts { case SyntaxKind.MethodDeclaration: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return (node).name.kind === SyntaxKind.ComputedPropertyName - && traverse((node).name); + return (node).name.kind === SyntaxKind.ComputedPropertyName + && traverse((node).name); default: return !nodeStartsNewLexicalEnvironment(node) && !isPartOfTypeNode(node) && forEachChild(node, traverse); @@ -9925,7 +9925,7 @@ namespace ts { case SyntaxKind.SetAccessor: case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: - if (!declaration.name) { + if (!(declaration as NamedDeclaration).name) { error(declaration, Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; } @@ -21909,7 +21909,7 @@ namespace ts { function isTypeDeclarationName(name: Node): boolean { return name.kind === SyntaxKind.Identifier && isTypeDeclaration(name.parent) && - (name.parent).name === name; + (name.parent).name === name; } function isTypeDeclaration(node: Node): boolean { diff --git a/src/compiler/transformers/es2015.ts b/src/compiler/transformers/es2015.ts index 188da04b36c..cd3f1310100 100644 --- a/src/compiler/transformers/es2015.ts +++ b/src/compiler/transformers/es2015.ts @@ -3748,7 +3748,7 @@ namespace ts { case SyntaxKind.ClassDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.VariableDeclaration: - return (parent).name === node + return (parent).name === node && resolver.isDeclarationWithCollidingName(parent); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 51e9d6717ee..63879d76ffa 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -603,15 +603,15 @@ namespace ts { export type DeclarationName = Identifier | StringLiteral | NumericLiteral | ComputedPropertyName | BindingPattern; - export interface RealDeclaration extends Node { + export interface Declaration extends Node { _declarationBrand: any; + } + + export interface NamedDeclaration extends Declaration { name?: DeclarationName; } - // Binary expressions can be declarations if they are 'exports.foo = bar' expressions in JS files - export type Declaration = RealDeclaration | BinaryExpression; - - export interface DeclarationStatement extends RealDeclaration, Statement { + export interface DeclarationStatement extends NamedDeclaration, Statement { name?: Identifier | StringLiteral | NumericLiteral; } @@ -625,7 +625,7 @@ namespace ts { expression: LeftHandSideExpression; } - export interface TypeParameterDeclaration extends RealDeclaration { + export interface TypeParameterDeclaration extends NamedDeclaration { kind: SyntaxKind.TypeParameter; parent?: DeclarationWithTypeParameters; name: Identifier; @@ -636,7 +636,7 @@ namespace ts { expression?: Expression; } - export interface SignatureDeclaration extends RealDeclaration { + export interface SignatureDeclaration extends NamedDeclaration { name?: PropertyName; typeParameters?: NodeArray; parameters: NodeArray; @@ -653,7 +653,7 @@ namespace ts { export type BindingName = Identifier | BindingPattern; - export interface VariableDeclaration extends RealDeclaration { + export interface VariableDeclaration extends NamedDeclaration { kind: SyntaxKind.VariableDeclaration; parent?: VariableDeclarationList | CatchClause; name: BindingName; // Declared variable name @@ -667,7 +667,7 @@ namespace ts { declarations: NodeArray; } - export interface ParameterDeclaration extends RealDeclaration { + export interface ParameterDeclaration extends NamedDeclaration { kind: SyntaxKind.Parameter; parent?: SignatureDeclaration; dotDotDotToken?: DotDotDotToken; // Present on rest parameter @@ -677,7 +677,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface BindingElement extends RealDeclaration { + export interface BindingElement extends NamedDeclaration { kind: SyntaxKind.BindingElement; parent?: BindingPattern; propertyName?: PropertyName; // Binding property name (in object binding pattern) @@ -702,7 +702,7 @@ namespace ts { initializer?: Expression; // Optional initializer } - export interface ObjectLiteralElement extends RealDeclaration { + export interface ObjectLiteralElement extends NamedDeclaration { _objectLiteralBrandBrand: any; name?: PropertyName; } @@ -746,7 +746,7 @@ namespace ts { // SyntaxKind.ShorthandPropertyAssignment // SyntaxKind.EnumMember // SyntaxKind.JSDocPropertyTag - export interface VariableLikeDeclaration extends RealDeclaration { + export interface VariableLikeDeclaration extends NamedDeclaration { propertyName?: PropertyName; dotDotDotToken?: DotDotDotToken; name: DeclarationName; @@ -755,7 +755,7 @@ namespace ts { initializer?: Expression; } - export interface PropertyLikeDeclaration extends RealDeclaration { + export interface PropertyLikeDeclaration extends NamedDeclaration { name: PropertyName; } @@ -904,7 +904,7 @@ namespace ts { } // A TypeLiteral is the declaration node for an anonymous symbol. - export interface TypeLiteralNode extends TypeNode, RealDeclaration { + export interface TypeLiteralNode extends TypeNode, NamedDeclaration { kind: SyntaxKind.TypeLiteral; members: NodeArray; } @@ -948,7 +948,7 @@ namespace ts { indexType: TypeNode; } - export interface MappedTypeNode extends TypeNode, RealDeclaration { + export interface MappedTypeNode extends TypeNode, NamedDeclaration { kind: SyntaxKind.MappedType; parent?: TypeAliasDeclaration; readonlyToken?: ReadonlyToken; @@ -1219,7 +1219,7 @@ namespace ts { export type BinaryOperatorToken = Token; - export interface BinaryExpression extends Expression { + export interface BinaryExpression extends Expression, Declaration { kind: SyntaxKind.BinaryExpression; left: Expression; operatorToken: BinaryOperatorToken; @@ -1405,7 +1405,7 @@ namespace ts { * JSXAttribute or JSXSpreadAttribute. ObjectLiteralExpression, on the other hand, can only have properties of type * ObjectLiteralElement (e.g. PropertyAssignment, ShorthandPropertyAssignment etc.) */ - export interface ObjectLiteralExpressionBase extends PrimaryExpression, RealDeclaration { + export interface ObjectLiteralExpressionBase extends PrimaryExpression, NamedDeclaration { properties: NodeArray; } @@ -1419,7 +1419,7 @@ namespace ts { export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression; export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression; - export interface PropertyAccessExpression extends MemberExpression, RealDeclaration { + export interface PropertyAccessExpression extends MemberExpression, NamedDeclaration { kind: SyntaxKind.PropertyAccessExpression; expression: LeftHandSideExpression; name: Identifier; @@ -1451,7 +1451,7 @@ namespace ts { | SuperElementAccessExpression ; - export interface CallExpression extends LeftHandSideExpression, RealDeclaration { + export interface CallExpression extends LeftHandSideExpression, NamedDeclaration { kind: SyntaxKind.CallExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1470,7 +1470,7 @@ namespace ts { typeArguments?: NodeArray; } - export interface NewExpression extends PrimaryExpression, RealDeclaration { + export interface NewExpression extends PrimaryExpression, NamedDeclaration { kind: SyntaxKind.NewExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1764,7 +1764,7 @@ namespace ts { export type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration; - export interface ClassLikeDeclaration extends RealDeclaration { + export interface ClassLikeDeclaration extends NamedDeclaration { name?: Identifier; typeParameters?: NodeArray; heritageClauses?: NodeArray; @@ -1780,12 +1780,12 @@ namespace ts { kind: SyntaxKind.ClassExpression; } - export interface ClassElement extends RealDeclaration { + export interface ClassElement extends NamedDeclaration { _classElementBrand: any; name?: PropertyName; } - export interface TypeElement extends RealDeclaration { + export interface TypeElement extends NamedDeclaration { _typeElementBrand: any; name?: PropertyName; questionToken?: QuestionToken; @@ -1813,7 +1813,7 @@ namespace ts { type: TypeNode; } - export interface EnumMember extends RealDeclaration { + export interface EnumMember extends NamedDeclaration { kind: SyntaxKind.EnumMember; parent?: EnumDeclaration; // This does include ComputedPropertyName, but the parser will give an error @@ -1902,14 +1902,14 @@ namespace ts { // import d, * as ns from "mod" => name = d, namedBinding: NamespaceImport = { name: ns } // import { a, b as x } from "mod" => name = undefined, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} // import d, { a, b as x } from "mod" => name = d, namedBinding: NamedImports = { elements: [{ name: a }, { name: x, propertyName: b}]} - export interface ImportClause extends RealDeclaration { + export interface ImportClause extends NamedDeclaration { kind: SyntaxKind.ImportClause; parent?: ImportDeclaration; name?: Identifier; // Default binding namedBindings?: NamedImportBindings; } - export interface NamespaceImport extends RealDeclaration { + export interface NamespaceImport extends NamedDeclaration { kind: SyntaxKind.NamespaceImport; parent?: ImportClause; name: Identifier; @@ -1942,14 +1942,14 @@ namespace ts { export type NamedImportsOrExports = NamedImports | NamedExports; - export interface ImportSpecifier extends RealDeclaration { + export interface ImportSpecifier extends NamedDeclaration { kind: SyntaxKind.ImportSpecifier; parent?: NamedImports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) name: Identifier; // Declared name } - export interface ExportSpecifier extends RealDeclaration { + export interface ExportSpecifier extends NamedDeclaration { kind: SyntaxKind.ExportSpecifier; parent?: NamedExports; propertyName?: Identifier; // Name preceding "as" keyword (or undefined when "as" is absent) @@ -2115,7 +2115,7 @@ namespace ts { typeExpression: JSDocTypeExpression; } - export interface JSDocTypedefTag extends JSDocTag, RealDeclaration { + export interface JSDocTypedefTag extends JSDocTag, NamedDeclaration { kind: SyntaxKind.JSDocTypedefTag; fullName?: JSDocNamespaceDeclaration | Identifier; name?: Identifier; @@ -2249,7 +2249,7 @@ namespace ts { // Source files are declarations when they are external modules. - export interface SourceFile extends RealDeclaration { + export interface SourceFile extends NamedDeclaration { kind: SyntaxKind.SourceFile; statements: NodeArray; endOfFileToken: Token; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index a3525ee0a70..0dc6c92ed2c 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -566,7 +566,7 @@ namespace ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.TypeAliasDeclaration: - errorNode = (node).name; + errorNode = (node).name; break; case SyntaxKind.ArrowFunction: return getErrorSpanForArrowFunction(sourceFile, node); @@ -1802,7 +1802,7 @@ namespace ts { } } else { - return declaration.name; + return (declaration as NamedDeclaration).name; } } @@ -1826,7 +1826,7 @@ namespace ts { case SyntaxKind.PropertyAssignment: case SyntaxKind.PropertyAccessExpression: // Name in member declaration or property name in property access - return (parent).name === node; + return (parent).name === node; case SyntaxKind.QualifiedName: // Name on right hand side of dot in a type query if ((parent).right === node) { @@ -2790,7 +2790,7 @@ namespace ts { forEach(declarations, (member: Declaration) => { if ((member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) && hasModifier(member, ModifierFlags.Static) === hasModifier(accessor, ModifierFlags.Static)) { - const memberName = getPropertyNameForPropertyNameNode(member.name); + const memberName = getPropertyNameForPropertyNameNode((member as NamedDeclaration).name); const accessorName = getPropertyNameForPropertyNameNode(accessor.name); if (memberName === accessorName) { if (!firstAccessor) { @@ -4102,7 +4102,7 @@ namespace ts { || kind === SyntaxKind.MergeDeclarationMarker; } - export function isDeclaration(node: Node): node is RealDeclaration { + export function isDeclaration(node: Node): node is NamedDeclaration { return isDeclarationKind(node.kind); } diff --git a/src/services/completions.ts b/src/services/completions.ts index 6ac3762b4c7..b9d62df751e 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1214,7 +1214,7 @@ namespace ts.Completions { // TODO(jfreeman): Account for computed property name // NOTE: if one only performs this step when m.name is an identifier, // things like '__proto__' are not filtered out. - existingName = (m.name).text; + existingName = (getNameOfDeclaration(m) as Identifier).text; } existingMemberNames.set(existingName, true); diff --git a/src/services/navigateTo.ts b/src/services/navigateTo.ts index c29b29143c5..2fdc567b9bb 100644 --- a/src/services/navigateTo.ts +++ b/src/services/navigateTo.ts @@ -52,7 +52,7 @@ namespace ts.NavigateTo { rawItems = filter(rawItems, item => { const decl = item.declaration; if (decl.kind === SyntaxKind.ImportClause || decl.kind === SyntaxKind.ImportSpecifier || decl.kind === SyntaxKind.ImportEqualsDeclaration) { - const importer = checker.getSymbolAtLocation(decl.name); + const importer = checker.getSymbolAtLocation((decl as NamedDeclaration).name); const imported = checker.getAliasedSymbol(importer); return importer.name !== imported.name; } From 36ef849209be5e8ef4ec40354ffdeea7bc84f298 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 8 May 2017 15:35:17 -0700 Subject: [PATCH 86/92] Update baaselines --- ...FunctionComponentsWithTypeArguments5.errors.txt | 2 +- ...tatelessFunctionComponentsWithTypeArguments5.js | 4 ++-- tests/cases/fourslash/tsxQuickInfo6.ts | 4 ++-- tests/cases/fourslash/tsxQuickInfo7.ts | 14 +++++++------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt index 3f5623921fd..b92375797e7 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/jsx/file.tsx(16,42): error TS2339: Property 'prop1' does declare function Component(l: U): JSX.Element; function createComponent(arg: T) { - // let a1 = ; + let a1 = ; let a2 = ; } diff --git a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js index e77e79ee732..7e3c8bf35d2 100644 --- a/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js +++ b/tests/baselines/reference/tsxStatelessFunctionComponentsWithTypeArguments5.js @@ -3,7 +3,7 @@ import React = require('react') declare function Component(l: U): JSX.Element; function createComponent(arg: T) { - // let a1 = ; + let a1 = ; let a2 = ; } @@ -23,7 +23,7 @@ define(["require", "exports", "react"], function (require, exports, React) { "use strict"; exports.__esModule = true; function createComponent(arg) { - // let a1 = ; + var a1 = ; var a2 = ; } function Bar(arg) { diff --git a/tests/cases/fourslash/tsxQuickInfo6.ts b/tests/cases/fourslash/tsxQuickInfo6.ts index e121e52c0aa..88d9435e801 100644 --- a/tests/cases/fourslash/tsxQuickInfo6.ts +++ b/tests/cases/fourslash/tsxQuickInfo6.ts @@ -14,6 +14,6 @@ //// } verify.quickInfos({ - 1: "function ComponentSpecific<{}>(l: {\n prop: {};\n}): any", - 2: "function ComponentSpecific<{}>(l: {\n prop: {};\n}): any" + 1: "function ComponentSpecific(l: {\n prop: number;\n}): any", + 2: "function ComponentSpecific<\"hello\">(l: {\n prop: \"hello\";\n}): any" }); diff --git a/tests/cases/fourslash/tsxQuickInfo7.ts b/tests/cases/fourslash/tsxQuickInfo7.ts index ca90d83d719..3e66fb655f1 100644 --- a/tests/cases/fourslash/tsxQuickInfo7.ts +++ b/tests/cases/fourslash/tsxQuickInfo7.ts @@ -15,15 +15,15 @@ //// let a3 = ; //// let a4 = ; //// let a5 = ; -//// let a6 = ; +//// let a6 = ; //// } verify.quickInfos({ - 1: "function OverloadComponent(): any (+2 overloads)", - 2: "function OverloadComponent(): any (+2 overloads)", - 3: "function OverloadComponent(): any (+2 overloads)", - 4: "function OverloadComponent(): any (+2 overloads)", + 1: "function OverloadComponent(attr: {\n b: number;\n a?: string;\n \"ignore-prop\": boolean;\n}): any (+2 overloads)", + 2: "function OverloadComponent(attr: {\n b: string;\n a: boolean;\n}): any (+2 overloads)", + 3: "function OverloadComponent(attr: {\n b: string;\n a: boolean;\n}): any (+2 overloads)", + 4: "function OverloadComponent(attr: {\n b: number;\n a?: string;\n \"ignore-prop\": boolean;\n}): any (+2 overloads)", 5: "function OverloadComponent(): any (+2 overloads)", - 6: "function OverloadComponent(): any (+2 overloads)", - 7: "function OverloadComponent(): any (+2 overloads)" + 6: "function OverloadComponent(attr: {\n b: number;\n a: boolean;\n}): any (+2 overloads)", + 7: "function OverloadComponent(attr: {\n b: string;\n a: boolean;\n}): any (+2 overloads)" }); From 3b676f430826972ce56fcbf570089aa145714c07 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 8 May 2017 15:35:26 -0700 Subject: [PATCH 87/92] Fix linting error --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e544b9239f6..abbbad789ac 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13285,7 +13285,7 @@ namespace ts { attributesArray = []; attributesTable = createMap(); } - const exprType = getApparentType(checkExpression(attributeDecl.expression)) + const exprType = getApparentType(checkExpression(attributeDecl.expression)); if (isTypeAny(exprType)) { hasSpreadAnyType = true; } From ccec13aaf151d444defe42fde6860ffddb8cc6f1 Mon Sep 17 00:00:00 2001 From: Andrew Stegmaier Date: Mon, 8 May 2017 23:56:29 -0700 Subject: [PATCH 88/92] getOwnPropertyDescriptor return should allow undefined getOwnPropertyDescriptor _should_ return undefined in certain situations. This is documented here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor This change addresses https://github.com/Microsoft/TypeScript/issues/14923 and https://github.com/Microsoft/TypeScript/issues/10904. The original fix to 14923 was to the /lib/lib.es2015.proxy.d.ts file instead of /src/lib/lib.es2015.proxy.d.ts (see: https://github.com/Microsoft/TypeScript/pull/10550/commits). I think this meant that the change got over-written by a generation script (see note here: https://github.com/Microsoft/TypeScript/tree/master/lib) --- src/lib/es2015.proxy.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/es2015.proxy.d.ts b/src/lib/es2015.proxy.d.ts index 34aedce0128..67595021346 100644 --- a/src/lib/es2015.proxy.d.ts +++ b/src/lib/es2015.proxy.d.ts @@ -3,7 +3,7 @@ interface ProxyHandler { setPrototypeOf? (target: T, v: any): boolean; isExtensible? (target: T): boolean; preventExtensions? (target: T): boolean; - getOwnPropertyDescriptor? (target: T, p: PropertyKey): PropertyDescriptor; + getOwnPropertyDescriptor? (target: T, p: PropertyKey): PropertyDescriptor | undefined; has? (target: T, p: PropertyKey): boolean; get? (target: T, p: PropertyKey, receiver: any): any; set? (target: T, p: PropertyKey, value: any, receiver: any): boolean; From 318ccf24b501eef627104adbe119983ca5bd486c Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Tue, 9 May 2017 09:08:58 -0700 Subject: [PATCH 89/92] importTracker: Require calls are stored in `sourceFile.imports`, no need to search for them --- src/services/importTracker.ts | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/services/importTracker.ts b/src/services/importTracker.ts index c94d5cc3143..f85f5961aaa 100644 --- a/src/services/importTracker.ts +++ b/src/services/importTracker.ts @@ -330,7 +330,7 @@ namespace ts.FindAllReferences { /** Calls `action` for each import, re-export, or require() in a file. */ function forEachImport(sourceFile: SourceFile, action: (importStatement: ImporterOrCallExpression, imported: StringLiteral) => void): void { - if (sourceFile.externalModuleIndicator) { + if (sourceFile.externalModuleIndicator || sourceFile.imports !== undefined) { for (const moduleSpecifier of sourceFile.imports) { action(importerFromModuleSpecifier(moduleSpecifier), moduleSpecifier); } @@ -358,27 +358,21 @@ namespace ts.FindAllReferences { } } }); - - if (sourceFile.flags & NodeFlags.JavaScriptFile) { - // Find all 'require()' calls. - sourceFile.forEachChild(function recur(node: Node): void { - if (isRequireCall(node, /*checkArgumentIsStringLiteral*/ true)) { - action(node, node.arguments[0] as StringLiteral); - } else { - node.forEachChild(recur); - } - }); - } } } - function importerFromModuleSpecifier(moduleSpecifier: StringLiteral): Importer { + function importerFromModuleSpecifier(moduleSpecifier: StringLiteral): ImporterOrCallExpression { const decl = moduleSpecifier.parent; - if (decl.kind === SyntaxKind.ImportDeclaration || decl.kind === SyntaxKind.ExportDeclaration) { - return decl as ImportDeclaration | ExportDeclaration; + switch (decl.kind) { + case SyntaxKind.CallExpression: + case SyntaxKind.ImportDeclaration: + case SyntaxKind.ExportDeclaration: + return decl as ImportDeclaration | ExportDeclaration | CallExpression; + case SyntaxKind.ExternalModuleReference: + return (decl as ExternalModuleReference).parent; + default: + Debug.assert(false); } - Debug.assert(decl.kind === SyntaxKind.ExternalModuleReference); - return (decl as ExternalModuleReference).parent; } export interface ImportedSymbol { From 157b777660b7e65d8e2d9cf871bd7f9c1aba5bbe Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 9 May 2017 10:46:47 -0700 Subject: [PATCH 90/92] Unnamed nodes now extend Declaration, not NamedDeclaration --- src/compiler/types.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index a6c04616652..4bd44a89f4d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -904,7 +904,7 @@ namespace ts { } // A TypeLiteral is the declaration node for an anonymous symbol. - export interface TypeLiteralNode extends TypeNode, NamedDeclaration { + export interface TypeLiteralNode extends TypeNode, Declaration { kind: SyntaxKind.TypeLiteral; members: NodeArray; } @@ -948,7 +948,7 @@ namespace ts { indexType: TypeNode; } - export interface MappedTypeNode extends TypeNode, NamedDeclaration { + export interface MappedTypeNode extends TypeNode, Declaration { kind: SyntaxKind.MappedType; parent?: TypeAliasDeclaration; readonlyToken?: ReadonlyToken; @@ -1405,7 +1405,7 @@ namespace ts { * JSXAttribute or JSXSpreadAttribute. ObjectLiteralExpression, on the other hand, can only have properties of type * ObjectLiteralElement (e.g. PropertyAssignment, ShorthandPropertyAssignment etc.) */ - export interface ObjectLiteralExpressionBase extends PrimaryExpression, NamedDeclaration { + export interface ObjectLiteralExpressionBase extends PrimaryExpression, Declaration { properties: NodeArray; } @@ -1451,7 +1451,7 @@ namespace ts { | SuperElementAccessExpression ; - export interface CallExpression extends LeftHandSideExpression, NamedDeclaration { + export interface CallExpression extends LeftHandSideExpression, Declaration { kind: SyntaxKind.CallExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -1470,7 +1470,7 @@ namespace ts { typeArguments?: NodeArray; } - export interface NewExpression extends PrimaryExpression, NamedDeclaration { + export interface NewExpression extends PrimaryExpression, Declaration { kind: SyntaxKind.NewExpression; expression: LeftHandSideExpression; typeArguments?: NodeArray; @@ -2249,7 +2249,7 @@ namespace ts { // Source files are declarations when they are external modules. - export interface SourceFile extends NamedDeclaration { + export interface SourceFile extends Declaration { kind: SyntaxKind.SourceFile; statements: NodeArray; endOfFileToken: Token; From a2dec0d03dd03849346cc1bf5569a28aa4ee6c99 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 9 May 2017 12:01:10 -0700 Subject: [PATCH 91/92] Fix #15062: report errors for parameter properties in private constructors --- src/compiler/declarationEmitter.ts | 11 ++- .../classConstructorAccessibility.js | 2 +- .../classConstructorAccessibility2.js | 2 +- .../classConstructorAccessibility3.js | 2 +- .../classConstructorOverloadsAccessibility.js | 2 +- .../declarationEmitClassPrivateConstructor.js | 72 +++++++++++++++++++ ...arationEmitClassPrivateConstructor.symbols | 38 ++++++++++ ...clarationEmitClassPrivateConstructor.types | 38 ++++++++++ ...ionEmitClassPrivateConstructor2.errors.txt | 20 ++++++ ...declarationEmitClassPrivateConstructor2.js | 29 ++++++++ .../reference/typesWithPrivateConstructor.js | 2 +- .../declarationEmitClassPrivateConstructor.ts | 22 ++++++ ...declarationEmitClassPrivateConstructor2.ts | 15 ++++ 13 files changed, 248 insertions(+), 7 deletions(-) create mode 100644 tests/baselines/reference/declarationEmitClassPrivateConstructor.js create mode 100644 tests/baselines/reference/declarationEmitClassPrivateConstructor.symbols create mode 100644 tests/baselines/reference/declarationEmitClassPrivateConstructor.types create mode 100644 tests/baselines/reference/declarationEmitClassPrivateConstructor2.errors.txt create mode 100644 tests/baselines/reference/declarationEmitClassPrivateConstructor2.js create mode 100644 tests/cases/compiler/declarationEmitClassPrivateConstructor.ts create mode 100644 tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index d7ad2c3a78d..3c02fc634b5 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -1266,7 +1266,9 @@ namespace ts { Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; } // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit - else if (node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature) { + // The only exception here is if the constructor was marked as private. we are not emitting the constructor paramters at all. + else if (node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature || + (node.kind === SyntaxKind.Parameter && hasModifier(node.parent, ModifierFlags.Private))) { // TODO(jfreeman): Deal with computed properties in error reporting. if (hasModifier(node, ModifierFlags.Static)) { return symbolAccessibilityResult.errorModuleName ? @@ -1275,7 +1277,7 @@ namespace ts { Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; } - else if (node.parent.kind === SyntaxKind.ClassDeclaration) { + else if (node.parent.kind === SyntaxKind.ClassDeclaration || node.kind === SyntaxKind.Parameter) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === SymbolAccessibility.CannotBeNamed ? Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -1501,6 +1503,11 @@ namespace ts { write("["); } else { + if (node.kind === SyntaxKind.Constructor && hasModifier(node, ModifierFlags.Private)) { + write("();"); + writeLine(); + return; + } // Construct signature or constructor type write new Signature if (node.kind === SyntaxKind.ConstructSignature || node.kind === SyntaxKind.ConstructorType) { write("new "); diff --git a/tests/baselines/reference/classConstructorAccessibility.js b/tests/baselines/reference/classConstructorAccessibility.js index 46a548d0b54..4d120a3980f 100644 --- a/tests/baselines/reference/classConstructorAccessibility.js +++ b/tests/baselines/reference/classConstructorAccessibility.js @@ -89,7 +89,7 @@ declare class C { } declare class D { x: number; - private constructor(x); + private constructor(); } declare class E { x: number; diff --git a/tests/baselines/reference/classConstructorAccessibility2.js b/tests/baselines/reference/classConstructorAccessibility2.js index 7297af11a4e..76c8ea19110 100644 --- a/tests/baselines/reference/classConstructorAccessibility2.js +++ b/tests/baselines/reference/classConstructorAccessibility2.js @@ -135,7 +135,7 @@ declare class BaseB { } declare class BaseC { x: number; - private constructor(x); + private constructor(); createInstance(): void; static staticInstance(): void; } diff --git a/tests/baselines/reference/classConstructorAccessibility3.js b/tests/baselines/reference/classConstructorAccessibility3.js index 3e024970bcf..d1bd8f38c40 100644 --- a/tests/baselines/reference/classConstructorAccessibility3.js +++ b/tests/baselines/reference/classConstructorAccessibility3.js @@ -90,7 +90,7 @@ declare class Baz { } declare class Qux { x: number; - private constructor(x); + private constructor(); } declare let a: typeof Foo; declare let b: typeof Baz; diff --git a/tests/baselines/reference/classConstructorOverloadsAccessibility.js b/tests/baselines/reference/classConstructorOverloadsAccessibility.js index 7fef7443c62..2a173966d5d 100644 --- a/tests/baselines/reference/classConstructorOverloadsAccessibility.js +++ b/tests/baselines/reference/classConstructorOverloadsAccessibility.js @@ -59,7 +59,7 @@ var D = (function () { declare class A { constructor(a: boolean); protected constructor(a: number); - private constructor(a); + private constructor(); } declare class B { protected constructor(a: number); diff --git a/tests/baselines/reference/declarationEmitClassPrivateConstructor.js b/tests/baselines/reference/declarationEmitClassPrivateConstructor.js new file mode 100644 index 00000000000..6cc65964987 --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassPrivateConstructor.js @@ -0,0 +1,72 @@ +//// [declarationEmitClassPrivateConstructor.ts] +interface PrivateInterface { +} + +export class ExportedClass1 { + private constructor(data: PrivateInterface) { } +} + +export class ExportedClass2 { + private constructor(private data: PrivateInterface) { } +} + +export class ExportedClass3 { + private constructor(private data: PrivateInterface, private n: number) { } +} + +export class ExportedClass4 { + private constructor(private data: PrivateInterface, public n:number) { } +} + +//// [declarationEmitClassPrivateConstructor.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var ExportedClass1 = (function () { + function ExportedClass1(data) { + } + return ExportedClass1; +}()); +exports.ExportedClass1 = ExportedClass1; +var ExportedClass2 = (function () { + function ExportedClass2(data) { + this.data = data; + } + return ExportedClass2; +}()); +exports.ExportedClass2 = ExportedClass2; +var ExportedClass3 = (function () { + function ExportedClass3(data, n) { + this.data = data; + this.n = n; + } + return ExportedClass3; +}()); +exports.ExportedClass3 = ExportedClass3; +var ExportedClass4 = (function () { + function ExportedClass4(data, n) { + this.data = data; + this.n = n; + } + return ExportedClass4; +}()); +exports.ExportedClass4 = ExportedClass4; + + +//// [declarationEmitClassPrivateConstructor.d.ts] +export declare class ExportedClass1 { + private constructor(); +} +export declare class ExportedClass2 { + private data; + private constructor(); +} +export declare class ExportedClass3 { + private data; + private n; + private constructor(); +} +export declare class ExportedClass4 { + private data; + n: number; + private constructor(); +} diff --git a/tests/baselines/reference/declarationEmitClassPrivateConstructor.symbols b/tests/baselines/reference/declarationEmitClassPrivateConstructor.symbols new file mode 100644 index 00000000000..285d9fb3f39 --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassPrivateConstructor.symbols @@ -0,0 +1,38 @@ +=== tests/cases/compiler/declarationEmitClassPrivateConstructor.ts === +interface PrivateInterface { +>PrivateInterface : Symbol(PrivateInterface, Decl(declarationEmitClassPrivateConstructor.ts, 0, 0)) +} + +export class ExportedClass1 { +>ExportedClass1 : Symbol(ExportedClass1, Decl(declarationEmitClassPrivateConstructor.ts, 1, 1)) + + private constructor(data: PrivateInterface) { } +>data : Symbol(data, Decl(declarationEmitClassPrivateConstructor.ts, 4, 24)) +>PrivateInterface : Symbol(PrivateInterface, Decl(declarationEmitClassPrivateConstructor.ts, 0, 0)) +} + +export class ExportedClass2 { +>ExportedClass2 : Symbol(ExportedClass2, Decl(declarationEmitClassPrivateConstructor.ts, 5, 1)) + + private constructor(private data: PrivateInterface) { } +>data : Symbol(ExportedClass2.data, Decl(declarationEmitClassPrivateConstructor.ts, 8, 24)) +>PrivateInterface : Symbol(PrivateInterface, Decl(declarationEmitClassPrivateConstructor.ts, 0, 0)) +} + +export class ExportedClass3 { +>ExportedClass3 : Symbol(ExportedClass3, Decl(declarationEmitClassPrivateConstructor.ts, 9, 1)) + + private constructor(private data: PrivateInterface, private n: number) { } +>data : Symbol(ExportedClass3.data, Decl(declarationEmitClassPrivateConstructor.ts, 12, 24)) +>PrivateInterface : Symbol(PrivateInterface, Decl(declarationEmitClassPrivateConstructor.ts, 0, 0)) +>n : Symbol(ExportedClass3.n, Decl(declarationEmitClassPrivateConstructor.ts, 12, 55)) +} + +export class ExportedClass4 { +>ExportedClass4 : Symbol(ExportedClass4, Decl(declarationEmitClassPrivateConstructor.ts, 13, 1)) + + private constructor(private data: PrivateInterface, public n:number) { } +>data : Symbol(ExportedClass4.data, Decl(declarationEmitClassPrivateConstructor.ts, 16, 24)) +>PrivateInterface : Symbol(PrivateInterface, Decl(declarationEmitClassPrivateConstructor.ts, 0, 0)) +>n : Symbol(ExportedClass4.n, Decl(declarationEmitClassPrivateConstructor.ts, 16, 55)) +} diff --git a/tests/baselines/reference/declarationEmitClassPrivateConstructor.types b/tests/baselines/reference/declarationEmitClassPrivateConstructor.types new file mode 100644 index 00000000000..ed8d5494ba6 --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassPrivateConstructor.types @@ -0,0 +1,38 @@ +=== tests/cases/compiler/declarationEmitClassPrivateConstructor.ts === +interface PrivateInterface { +>PrivateInterface : PrivateInterface +} + +export class ExportedClass1 { +>ExportedClass1 : ExportedClass1 + + private constructor(data: PrivateInterface) { } +>data : PrivateInterface +>PrivateInterface : PrivateInterface +} + +export class ExportedClass2 { +>ExportedClass2 : ExportedClass2 + + private constructor(private data: PrivateInterface) { } +>data : PrivateInterface +>PrivateInterface : PrivateInterface +} + +export class ExportedClass3 { +>ExportedClass3 : ExportedClass3 + + private constructor(private data: PrivateInterface, private n: number) { } +>data : PrivateInterface +>PrivateInterface : PrivateInterface +>n : number +} + +export class ExportedClass4 { +>ExportedClass4 : ExportedClass4 + + private constructor(private data: PrivateInterface, public n:number) { } +>data : PrivateInterface +>PrivateInterface : PrivateInterface +>n : number +} diff --git a/tests/baselines/reference/declarationEmitClassPrivateConstructor2.errors.txt b/tests/baselines/reference/declarationEmitClassPrivateConstructor2.errors.txt new file mode 100644 index 00000000000..a31454a4760 --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassPrivateConstructor2.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts(5,38): error TS4031: Public property 'data' of exported class has or is using private name 'PrivateInterface'. +tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts(10,33): error TS4063: Parameter 'data' of constructor from exported class has or is using private name 'PrivateInterface'. + + +==== tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts (2 errors) ==== + interface PrivateInterface { + } + + export class ExportedClass1 { + private constructor(public data: PrivateInterface) { } + ~~~~~~~~~~~~~~~~ +!!! error TS4031: Public property 'data' of exported class has or is using private name 'PrivateInterface'. + } + + + export class ExportedClass2 { + protected constructor(data: PrivateInterface) { } + ~~~~~~~~~~~~~~~~ +!!! error TS4063: Parameter 'data' of constructor from exported class has or is using private name 'PrivateInterface'. + } \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmitClassPrivateConstructor2.js b/tests/baselines/reference/declarationEmitClassPrivateConstructor2.js new file mode 100644 index 00000000000..8b7ad25a6bf --- /dev/null +++ b/tests/baselines/reference/declarationEmitClassPrivateConstructor2.js @@ -0,0 +1,29 @@ +//// [declarationEmitClassPrivateConstructor2.ts] +interface PrivateInterface { +} + +export class ExportedClass1 { + private constructor(public data: PrivateInterface) { } +} + + +export class ExportedClass2 { + protected constructor(data: PrivateInterface) { } +} + +//// [declarationEmitClassPrivateConstructor2.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var ExportedClass1 = (function () { + function ExportedClass1(data) { + this.data = data; + } + return ExportedClass1; +}()); +exports.ExportedClass1 = ExportedClass1; +var ExportedClass2 = (function () { + function ExportedClass2(data) { + } + return ExportedClass2; +}()); +exports.ExportedClass2 = ExportedClass2; diff --git a/tests/baselines/reference/typesWithPrivateConstructor.js b/tests/baselines/reference/typesWithPrivateConstructor.js index be58c77339d..e5c59b99e93 100644 --- a/tests/baselines/reference/typesWithPrivateConstructor.js +++ b/tests/baselines/reference/typesWithPrivateConstructor.js @@ -38,7 +38,7 @@ declare class C { declare var c: any; declare var r: () => void; declare class C2 { - private constructor(x); + private constructor(); } declare var c2: any; declare var r2: (x: number) => void; diff --git a/tests/cases/compiler/declarationEmitClassPrivateConstructor.ts b/tests/cases/compiler/declarationEmitClassPrivateConstructor.ts new file mode 100644 index 00000000000..d77360496c9 --- /dev/null +++ b/tests/cases/compiler/declarationEmitClassPrivateConstructor.ts @@ -0,0 +1,22 @@ +// @target: es5 +// @module: commonjs +// @declaration: true + +interface PrivateInterface { +} + +export class ExportedClass1 { + private constructor(data: PrivateInterface) { } +} + +export class ExportedClass2 { + private constructor(private data: PrivateInterface) { } +} + +export class ExportedClass3 { + private constructor(private data: PrivateInterface, private n: number) { } +} + +export class ExportedClass4 { + private constructor(private data: PrivateInterface, public n:number) { } +} \ No newline at end of file diff --git a/tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts b/tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts new file mode 100644 index 00000000000..900ece84f8e --- /dev/null +++ b/tests/cases/compiler/declarationEmitClassPrivateConstructor2.ts @@ -0,0 +1,15 @@ +// @target: es5 +// @module: commonjs +// @declaration: true + +interface PrivateInterface { +} + +export class ExportedClass1 { + private constructor(public data: PrivateInterface) { } +} + + +export class ExportedClass2 { + protected constructor(data: PrivateInterface) { } +} \ No newline at end of file From 0349caa5cfec61589af41a7b660714ca062dd2ab Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 9 May 2017 13:54:35 -0700 Subject: [PATCH 92/92] fix typo --- src/compiler/declarationEmitter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index 3c02fc634b5..07cb850b01d 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -1266,7 +1266,7 @@ namespace ts { Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; } // This check is to ensure we don't report error on constructor parameter property as that error would be reported during parameter emit - // The only exception here is if the constructor was marked as private. we are not emitting the constructor paramters at all. + // The only exception here is if the constructor was marked as private. we are not emitting the constructor parameters at all. else if (node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature || (node.kind === SyntaxKind.Parameter && hasModifier(node.parent, ModifierFlags.Private))) { // TODO(jfreeman): Deal with computed properties in error reporting.