From 5b1f29c722dca124a2fcdf5f8eb1b314e04b7ea1 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 7 Feb 2018 15:39:04 -0800 Subject: [PATCH] Fix the member completion returned on right side of the import when it does not resolve to any symbol Fixes #20794 --- src/compiler/checker.ts | 6 ++++-- tests/baselines/reference/ExportAssignment7.types | 2 +- tests/baselines/reference/ExportAssignment8.types | 2 +- tests/baselines/reference/aliasErrors.types | 14 +++++++------- ...ckScopedFunctionDeclarationInStrictModule.types | 2 +- .../reference/classAbstractManyKeywords.types | 2 +- .../constructorWithIncompleteTypeAnnotation.types | 2 +- .../reference/declarationEmitUnknownImport.types | 2 +- .../reference/declarationEmitUnknownImport2.types | 2 +- .../reference/declareModifierOnImport1.types | 2 +- .../errorForUsingPropertyOfTypeAsType01.types | 4 ++-- tests/baselines/reference/importAnImport.types | 2 +- .../reference/importDeclWithClassModifiers.types | 6 +++--- .../reference/importDeclWithDeclareModifier.types | 2 +- .../reference/importDeclWithExportModifier.types | 2 +- ...DeclWithExportModifierAndExportAssignment.types | 2 +- .../reference/invalidImportAliasIdentifiers.types | 6 +++--- ...FileCompilationBindMultipleDefaultExports.types | 2 +- .../jsFileCompilationExportAssignmentSyntax.types | 2 +- .../jsFileCompilationImportEqualsSyntax.types | 2 +- tests/baselines/reference/jsdocInTypeScript.types | 2 +- tests/baselines/reference/moduleImport.types | 4 ++-- tests/baselines/reference/parser519458.types | 2 +- .../reference/parserExportAssignment1.types | 2 +- .../reference/parserExportAssignment2.types | 2 +- .../reference/parserExportAssignment3.types | 2 +- .../reference/parserExportAssignment4.types | 2 +- .../reference/parserExportAssignment5.types | 2 +- .../reference/parserExportAssignment6.types | 2 +- .../reference/parserExportAssignment7.types | 2 +- .../reference/parserExportAssignment8.types | 2 +- .../reference/parserExportAssignment9.types | 4 ++-- .../reference/parserImportDeclaration1.types | 4 ++-- .../reference/reexportedMissingAlias.types | 2 +- .../reference/scannerImportDeclaration1.types | 4 ++-- tests/baselines/reference/unknownSymbols2.types | 2 +- .../memberCompletionOnRightSideOfImport.ts | 6 ++++++ 37 files changed, 60 insertions(+), 52 deletions(-) create mode 100644 tests/cases/fourslash/memberCompletionOnRightSideOfImport.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 85e8a7c5371..3fbb87f5ee6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24838,8 +24838,10 @@ namespace ts { if (isInRightSideOfImportOrExportAssignment(node)) { const symbol = getSymbolAtLocation(node); - const declaredType = symbol && getDeclaredTypeOfSymbol(symbol); - return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); + if (symbol) { + const declaredType = getDeclaredTypeOfSymbol(symbol); + return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol); + } } return unknownType; diff --git a/tests/baselines/reference/ExportAssignment7.types b/tests/baselines/reference/ExportAssignment7.types index 2f0871f48a5..cf1f3ef7956 100644 --- a/tests/baselines/reference/ExportAssignment7.types +++ b/tests/baselines/reference/ExportAssignment7.types @@ -4,5 +4,5 @@ export class C { } export = B; ->B : No type information available! +>B : any diff --git a/tests/baselines/reference/ExportAssignment8.types b/tests/baselines/reference/ExportAssignment8.types index 1b141b0b216..86db65f2fbd 100644 --- a/tests/baselines/reference/ExportAssignment8.types +++ b/tests/baselines/reference/ExportAssignment8.types @@ -1,6 +1,6 @@ === tests/cases/compiler/ExportAssignment8.ts === export = B; ->B : No type information available! +>B : any export class C { >C : C diff --git a/tests/baselines/reference/aliasErrors.types b/tests/baselines/reference/aliasErrors.types index 6dc25ef9a33..c8e1b04fa76 100644 --- a/tests/baselines/reference/aliasErrors.types +++ b/tests/baselines/reference/aliasErrors.types @@ -28,31 +28,31 @@ import beez = foo.bar; import m = no; >m : any ->no : No type information available! +>no : any import m2 = no.mod; >m2 : any ->no : No type information available! ->mod : No type information available! +>no : any +>mod : any import n = 5; >n : any -> : No type information available! +> : any >5 : 5 import o = "s"; >o : any -> : No type information available! +> : any >"s" : "s" import q = null; >q : any -> : No type information available! +> : any >null : null import r = undefined; >r : any ->undefined : No type information available! +>undefined : any var p = new provide.Provide(); diff --git a/tests/baselines/reference/blockScopedFunctionDeclarationInStrictModule.types b/tests/baselines/reference/blockScopedFunctionDeclarationInStrictModule.types index f0b9693ed70..67785432c1d 100644 --- a/tests/baselines/reference/blockScopedFunctionDeclarationInStrictModule.types +++ b/tests/baselines/reference/blockScopedFunctionDeclarationInStrictModule.types @@ -11,5 +11,5 @@ if (true) { } export = foo; // not ok ->foo : No type information available! +>foo : any diff --git a/tests/baselines/reference/classAbstractManyKeywords.types b/tests/baselines/reference/classAbstractManyKeywords.types index ab7071a8842..75c3baf75b2 100644 --- a/tests/baselines/reference/classAbstractManyKeywords.types +++ b/tests/baselines/reference/classAbstractManyKeywords.types @@ -10,6 +10,6 @@ default abstract class C {} import abstract class D {} >abstract : any -> : No type information available! +> : any >D : D diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.types b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.types index d1b7c98087f..9aa2cd44c35 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.types +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.types @@ -19,7 +19,7 @@ declare module "fs" { import fs = module("fs"); >fs : any ->module : No type information available! +>module : any >("fs") : "fs" >"fs" : "fs" diff --git a/tests/baselines/reference/declarationEmitUnknownImport.types b/tests/baselines/reference/declarationEmitUnknownImport.types index fb46a42b160..edf79fcb947 100644 --- a/tests/baselines/reference/declarationEmitUnknownImport.types +++ b/tests/baselines/reference/declarationEmitUnknownImport.types @@ -1,7 +1,7 @@ === tests/cases/compiler/declarationEmitUnknownImport.ts === import Foo = SomeNonExistingName >Foo : any ->SomeNonExistingName : No type information available! +>SomeNonExistingName : any export {Foo} >Foo : any diff --git a/tests/baselines/reference/declarationEmitUnknownImport2.types b/tests/baselines/reference/declarationEmitUnknownImport2.types index 98a48295ea8..8096334fddc 100644 --- a/tests/baselines/reference/declarationEmitUnknownImport2.types +++ b/tests/baselines/reference/declarationEmitUnknownImport2.types @@ -1,7 +1,7 @@ === tests/cases/compiler/declarationEmitUnknownImport2.ts === import Foo From './Foo'; // Syntax error >Foo : any ->From : No type information available! +>From : any >'./Foo' : "./Foo" export default Foo diff --git a/tests/baselines/reference/declareModifierOnImport1.types b/tests/baselines/reference/declareModifierOnImport1.types index 89f56a486b3..b391193ae11 100644 --- a/tests/baselines/reference/declareModifierOnImport1.types +++ b/tests/baselines/reference/declareModifierOnImport1.types @@ -1,5 +1,5 @@ === tests/cases/compiler/declareModifierOnImport1.ts === declare import a = b; >a : any ->b : No type information available! +>b : any diff --git a/tests/baselines/reference/errorForUsingPropertyOfTypeAsType01.types b/tests/baselines/reference/errorForUsingPropertyOfTypeAsType01.types index 12c0fb9692d..416fcd1a9b2 100644 --- a/tests/baselines/reference/errorForUsingPropertyOfTypeAsType01.types +++ b/tests/baselines/reference/errorForUsingPropertyOfTypeAsType01.types @@ -122,6 +122,6 @@ namespace Test5 { import lol = Test5.Foo. >lol : any >Test5 : typeof Test5 ->Foo : No type information available! -> : No type information available! +>Foo : any +> : any diff --git a/tests/baselines/reference/importAnImport.types b/tests/baselines/reference/importAnImport.types index 15ea76462b0..54aef2d6692 100644 --- a/tests/baselines/reference/importAnImport.types +++ b/tests/baselines/reference/importAnImport.types @@ -17,5 +17,5 @@ module m0 { >c : any >a : any >b : any ->ma : No type information available! +>ma : any } diff --git a/tests/baselines/reference/importDeclWithClassModifiers.types b/tests/baselines/reference/importDeclWithClassModifiers.types index 809d0682506..af52a62d84c 100644 --- a/tests/baselines/reference/importDeclWithClassModifiers.types +++ b/tests/baselines/reference/importDeclWithClassModifiers.types @@ -9,17 +9,17 @@ module x { export public import a = x.c; >a : any >x : any ->c : No type information available! +>c : any export private import b = x.c; >b : any >x : any ->c : No type information available! +>c : any export static import c = x.c; >c : any >x : any ->c : No type information available! +>c : any var b: a; >b : any diff --git a/tests/baselines/reference/importDeclWithDeclareModifier.types b/tests/baselines/reference/importDeclWithDeclareModifier.types index a04682741c6..c37ddf6015e 100644 --- a/tests/baselines/reference/importDeclWithDeclareModifier.types +++ b/tests/baselines/reference/importDeclWithDeclareModifier.types @@ -9,7 +9,7 @@ module x { declare export import a = x.c; >a : any >x : any ->c : No type information available! +>c : any var b: a; >b : any diff --git a/tests/baselines/reference/importDeclWithExportModifier.types b/tests/baselines/reference/importDeclWithExportModifier.types index 35c130cb7ca..260c0a6f1ad 100644 --- a/tests/baselines/reference/importDeclWithExportModifier.types +++ b/tests/baselines/reference/importDeclWithExportModifier.types @@ -9,7 +9,7 @@ module x { export import a = x.c; >a : any >x : any ->c : No type information available! +>c : any var b: a; >b : any diff --git a/tests/baselines/reference/importDeclWithExportModifierAndExportAssignment.types b/tests/baselines/reference/importDeclWithExportModifierAndExportAssignment.types index 17eb37173ca..764f62c8e43 100644 --- a/tests/baselines/reference/importDeclWithExportModifierAndExportAssignment.types +++ b/tests/baselines/reference/importDeclWithExportModifierAndExportAssignment.types @@ -9,7 +9,7 @@ module x { export import a = x.c; >a : any >x : any ->c : No type information available! +>c : any export = x; >x : any diff --git a/tests/baselines/reference/invalidImportAliasIdentifiers.types b/tests/baselines/reference/invalidImportAliasIdentifiers.types index 804c57bdb19..38078792edb 100644 --- a/tests/baselines/reference/invalidImportAliasIdentifiers.types +++ b/tests/baselines/reference/invalidImportAliasIdentifiers.types @@ -7,7 +7,7 @@ var V = 12; import v = V; >v : any ->V : No type information available! +>V : any class C { >C : C @@ -18,7 +18,7 @@ class C { import c = C; >c : any ->C : No type information available! +>C : any enum E { >E : E @@ -41,5 +41,5 @@ interface I { import i = I; >i : any ->I : No type information available! +>I : any diff --git a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.types b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.types index c8b37e7121a..9afc8e3f1d6 100644 --- a/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.types +++ b/tests/baselines/reference/jsFileCompilationBindMultipleDefaultExports.types @@ -3,7 +3,7 @@ export default class a { >a : a } export default var a = 10; -> : No type information available! +> : any >a : number >10 : 10 diff --git a/tests/baselines/reference/jsFileCompilationExportAssignmentSyntax.types b/tests/baselines/reference/jsFileCompilationExportAssignmentSyntax.types index a098d9595cc..b1da4cd6d41 100644 --- a/tests/baselines/reference/jsFileCompilationExportAssignmentSyntax.types +++ b/tests/baselines/reference/jsFileCompilationExportAssignmentSyntax.types @@ -1,4 +1,4 @@ === tests/cases/compiler/a.js === export = b; ->b : No type information available! +>b : any diff --git a/tests/baselines/reference/jsFileCompilationImportEqualsSyntax.types b/tests/baselines/reference/jsFileCompilationImportEqualsSyntax.types index e7f25247e92..120c48204c5 100644 --- a/tests/baselines/reference/jsFileCompilationImportEqualsSyntax.types +++ b/tests/baselines/reference/jsFileCompilationImportEqualsSyntax.types @@ -1,5 +1,5 @@ === tests/cases/compiler/a.js === import a = b; >a : any ->b : No type information available! +>b : any diff --git a/tests/baselines/reference/jsdocInTypeScript.types b/tests/baselines/reference/jsdocInTypeScript.types index 1c6e8beead0..0fc9a4b269a 100644 --- a/tests/baselines/reference/jsdocInTypeScript.types +++ b/tests/baselines/reference/jsdocInTypeScript.types @@ -85,7 +85,7 @@ let i: I; // Should succeed thanks to type parameter default /** @typedef {string} N.Str */ import M = N; // Error: @typedef does not create namespaces in TypeScript code. >M : any ->N : No type information available! +>N : any // Not legal JSDoc, but that shouldn't matter in TypeScript. /** diff --git a/tests/baselines/reference/moduleImport.types b/tests/baselines/reference/moduleImport.types index 740a6cd62bb..409ae8cbf54 100644 --- a/tests/baselines/reference/moduleImport.types +++ b/tests/baselines/reference/moduleImport.types @@ -7,8 +7,8 @@ module A.B.C { import XYZ = X.Y.Z; >XYZ : any >X : typeof X ->Y : No type information available! ->Z : No type information available! +>Y : any +>Z : any export function ping(x: number) { >ping : (x: number) => void diff --git a/tests/baselines/reference/parser519458.types b/tests/baselines/reference/parser519458.types index 7bde7770903..12ac6a36150 100644 --- a/tests/baselines/reference/parser519458.types +++ b/tests/baselines/reference/parser519458.types @@ -1,7 +1,7 @@ === tests/cases/conformance/parser/ecmascript5/RegressionTests/parser519458.ts === import rect = module("rect"); var bar = new rect.Rect(); >rect : any ->module : No type information available! +>module : any >("rect") : "rect" >"rect" : "rect" >bar : any diff --git a/tests/baselines/reference/parserExportAssignment1.types b/tests/baselines/reference/parserExportAssignment1.types index 99a26ad76ba..3e26a92eca9 100644 --- a/tests/baselines/reference/parserExportAssignment1.types +++ b/tests/baselines/reference/parserExportAssignment1.types @@ -1,4 +1,4 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment1.ts === export = foo ->foo : No type information available! +>foo : any diff --git a/tests/baselines/reference/parserExportAssignment2.types b/tests/baselines/reference/parserExportAssignment2.types index b299a712142..4650a2e3c56 100644 --- a/tests/baselines/reference/parserExportAssignment2.types +++ b/tests/baselines/reference/parserExportAssignment2.types @@ -1,4 +1,4 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment2.ts === export = foo; ->foo : No type information available! +>foo : any diff --git a/tests/baselines/reference/parserExportAssignment3.types b/tests/baselines/reference/parserExportAssignment3.types index 5197ef47a8e..7a6e8a2d584 100644 --- a/tests/baselines/reference/parserExportAssignment3.types +++ b/tests/baselines/reference/parserExportAssignment3.types @@ -1,4 +1,4 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment3.ts === export = -> : No type information available! +> : any diff --git a/tests/baselines/reference/parserExportAssignment4.types b/tests/baselines/reference/parserExportAssignment4.types index 262a6062501..d27f10e2dcf 100644 --- a/tests/baselines/reference/parserExportAssignment4.types +++ b/tests/baselines/reference/parserExportAssignment4.types @@ -1,4 +1,4 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment4.ts === export = ; -> : No type information available! +> : any diff --git a/tests/baselines/reference/parserExportAssignment5.types b/tests/baselines/reference/parserExportAssignment5.types index db8c296e562..8aa773f8701 100644 --- a/tests/baselines/reference/parserExportAssignment5.types +++ b/tests/baselines/reference/parserExportAssignment5.types @@ -3,5 +3,5 @@ module M { >M : typeof M export = A; ->A : No type information available! +>A : any } diff --git a/tests/baselines/reference/parserExportAssignment6.types b/tests/baselines/reference/parserExportAssignment6.types index 1bf8de8b83e..d9b7fc0d21d 100644 --- a/tests/baselines/reference/parserExportAssignment6.types +++ b/tests/baselines/reference/parserExportAssignment6.types @@ -1,5 +1,5 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment6.ts === declare module "M" { export = A; ->A : No type information available! +>A : any } diff --git a/tests/baselines/reference/parserExportAssignment7.types b/tests/baselines/reference/parserExportAssignment7.types index 02544cbbc8d..28eddce43ca 100644 --- a/tests/baselines/reference/parserExportAssignment7.types +++ b/tests/baselines/reference/parserExportAssignment7.types @@ -4,5 +4,5 @@ export class C { } export = B; ->B : No type information available! +>B : any diff --git a/tests/baselines/reference/parserExportAssignment8.types b/tests/baselines/reference/parserExportAssignment8.types index 659710c460f..889b9929f44 100644 --- a/tests/baselines/reference/parserExportAssignment8.types +++ b/tests/baselines/reference/parserExportAssignment8.types @@ -1,6 +1,6 @@ === tests/cases/conformance/parser/ecmascript5/ExportAssignments/parserExportAssignment8.ts === export = B; ->B : No type information available! +>B : any export class C { >C : C diff --git a/tests/baselines/reference/parserExportAssignment9.types b/tests/baselines/reference/parserExportAssignment9.types index 2d0d78d95d6..76c4084ca5a 100644 --- a/tests/baselines/reference/parserExportAssignment9.types +++ b/tests/baselines/reference/parserExportAssignment9.types @@ -3,12 +3,12 @@ namespace Foo { >Foo : typeof Foo export default foo; ->foo : No type information available! +>foo : any } module Bar { >Bar : typeof Bar export default bar; ->bar : No type information available! +>bar : any } diff --git a/tests/baselines/reference/parserImportDeclaration1.types b/tests/baselines/reference/parserImportDeclaration1.types index d1b8202cf4e..2b70a5fd755 100644 --- a/tests/baselines/reference/parserImportDeclaration1.types +++ b/tests/baselines/reference/parserImportDeclaration1.types @@ -1,6 +1,6 @@ === tests/cases/conformance/parser/ecmascript5/parserImportDeclaration1.ts === import TypeScript = TypeScriptServices.TypeScript; >TypeScript : any ->TypeScriptServices : No type information available! ->TypeScript : No type information available! +>TypeScriptServices : any +>TypeScript : any diff --git a/tests/baselines/reference/reexportedMissingAlias.types b/tests/baselines/reference/reexportedMissingAlias.types index decadf0ec07..cbe3b71fc30 100644 --- a/tests/baselines/reference/reexportedMissingAlias.types +++ b/tests/baselines/reference/reexportedMissingAlias.types @@ -2,7 +2,7 @@ // Fixes #15094 export import Component = CompletelyMissing; >Component : any ->CompletelyMissing : No type information available! +>CompletelyMissing : any === tests/cases/compiler/first.d.ts === import * as Second from './second'; diff --git a/tests/baselines/reference/scannerImportDeclaration1.types b/tests/baselines/reference/scannerImportDeclaration1.types index 828c1183ccd..3772e87d6b8 100644 --- a/tests/baselines/reference/scannerImportDeclaration1.types +++ b/tests/baselines/reference/scannerImportDeclaration1.types @@ -1,6 +1,6 @@ === tests/cases/conformance/scanner/ecmascript5/scannerImportDeclaration1.ts === import TypeScript = TypeScriptServices.TypeScript; >TypeScript : any ->TypeScriptServices : No type information available! ->TypeScript : No type information available! +>TypeScriptServices : any +>TypeScript : any diff --git a/tests/baselines/reference/unknownSymbols2.types b/tests/baselines/reference/unknownSymbols2.types index fe0c6c1b46a..c87484d8215 100644 --- a/tests/baselines/reference/unknownSymbols2.types +++ b/tests/baselines/reference/unknownSymbols2.types @@ -66,5 +66,5 @@ module M { import d = asdf; >d : any ->asdf : No type information available! +>asdf : any } diff --git a/tests/cases/fourslash/memberCompletionOnRightSideOfImport.ts b/tests/cases/fourslash/memberCompletionOnRightSideOfImport.ts new file mode 100644 index 00000000000..223995ebb0c --- /dev/null +++ b/tests/cases/fourslash/memberCompletionOnRightSideOfImport.ts @@ -0,0 +1,6 @@ +/// + +////import x = M./**/ + +goTo.marker(""); +verify.completionListIsEmpty(); \ No newline at end of file