From 90d5c299b0dac01b982a120904a5512db2721112 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Wed, 5 Apr 2017 16:01:04 -0700 Subject: [PATCH] Remove special symbol for untyped modules Extending symbols from untyped modules is no longer an error, so #12532 didn't get us anything except slightly better quick info. --- src/compiler/checker.ts | 17 ++++++----------- src/compiler/utilities.ts | 4 ++-- src/services/findAllReferences.ts | 2 +- tests/cases/fourslash/untypedModuleImport.ts | 2 +- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 404767aee8b..6e5168dc8a2 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -203,8 +203,6 @@ namespace ts { const evolvingArrayTypes: EvolvingArrayType[] = []; const unknownSymbol = createSymbol(SymbolFlags.Property, "unknown"); - const untypedModuleSymbol = createSymbol(SymbolFlags.ValueModule, ""); - untypedModuleSymbol.exports = createMap(); const resolvingSymbol = createSymbol(0, "__resolving__"); const anyType = createIntrinsicType(TypeFlags.Any, "any"); @@ -1253,7 +1251,7 @@ namespace ts { if (moduleSymbol) { let exportDefaultSymbol: Symbol; - if (isUntypedOrShorthandAmbientModuleSymbol(moduleSymbol)) { + if (isShorthandAmbientModuleSymbol(moduleSymbol)) { exportDefaultSymbol = moduleSymbol; } else { @@ -1333,7 +1331,7 @@ namespace ts { if (targetSymbol) { const name = specifier.propertyName || specifier.name; if (name.text) { - if (isUntypedOrShorthandAmbientModuleSymbol(moduleSymbol)) { + if (isShorthandAmbientModuleSymbol(moduleSymbol)) { return moduleSymbol; } @@ -1586,18 +1584,15 @@ namespace ts { if (isForAugmentation) { const diag = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName); - return undefined; } else if (noImplicitAny && moduleNotFoundError) { error(errorNode, Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, moduleReference, resolvedModule.resolvedFileName); - return undefined; } - // Unlike a failed import, an untyped module produces a dummy symbol. - // This is checked for by `isUntypedOrShorthandAmbientModuleSymbol`. - return untypedModuleSymbol; + // Failed imports and untyped modules are both treated in an untyped manner; only difference is whether we give a diagnostic first. + return undefined; } if (moduleNotFoundError) { @@ -4367,7 +4362,7 @@ namespace ts { function getTypeOfFuncClassEnumModule(symbol: Symbol): Type { const links = getSymbolLinks(symbol); if (!links.type) { - if (symbol.flags & SymbolFlags.Module && isUntypedOrShorthandAmbientModuleSymbol(symbol)) { + if (symbol.flags & SymbolFlags.Module && isShorthandAmbientModuleSymbol(symbol)) { links.type = anyType; } else { @@ -22063,7 +22058,7 @@ namespace ts { function moduleExportsSomeValue(moduleReferenceExpression: Expression): boolean { let moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression); - if (!moduleSymbol || isUntypedOrShorthandAmbientModuleSymbol(moduleSymbol)) { + if (!moduleSymbol || isShorthandAmbientModuleSymbol(moduleSymbol)) { // If the module is not found or is shorthand, assume that it may export a value. return true; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 33cb0d8f489..b79ca0df144 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -439,8 +439,8 @@ namespace ts { } /** Given a symbol for a module, checks that it is either an untyped import or a shorthand ambient module. */ - export function isUntypedOrShorthandAmbientModuleSymbol(moduleSymbol: Symbol): boolean { - return !moduleSymbol.declarations || isShorthandAmbientModule(moduleSymbol.valueDeclaration); + export function isShorthandAmbientModuleSymbol(moduleSymbol: Symbol): boolean { + return isShorthandAmbientModule(moduleSymbol.valueDeclaration); } function isShorthandAmbientModule(node: Node): boolean { diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index 5a471fb6f35..5ef450b11f0 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -187,7 +187,7 @@ namespace ts.FindAllReferences { return { symbol }; } - if (ts.isUntypedOrShorthandAmbientModuleSymbol(aliasedSymbol)) { + if (ts.isShorthandAmbientModuleSymbol(aliasedSymbol)) { return { symbol, shorthandModuleSymbol: aliasedSymbol }; } diff --git a/tests/cases/fourslash/untypedModuleImport.ts b/tests/cases/fourslash/untypedModuleImport.ts index 433c584e3cf..1854010d5b6 100644 --- a/tests/cases/fourslash/untypedModuleImport.ts +++ b/tests/cases/fourslash/untypedModuleImport.ts @@ -12,7 +12,7 @@ verify.numberOfErrorsInCurrentFile(0); goTo.marker("fooModule"); verify.goToDefinitionIs([]); -verify.quickInfoIs("module "); +verify.quickInfoIs(""); verify.noReferences(); goTo.marker("foo");