From 2de0a974bb2cc25becc4b98ce29fad6272d24be7 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 24 Mar 2015 18:24:42 -0700 Subject: [PATCH 1/8] Added tests. --- ...ionListForTransitivelyExportedMembers01.ts | 39 ++++++++++++++++++ ...ionListForTransitivelyExportedMembers02.ts | 39 ++++++++++++++++++ ...ionListForTransitivelyExportedMembers03.ts | 40 +++++++++++++++++++ ...ionListForTransitivelyExportedMembers04.ts | 37 +++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 tests/cases/fourslash/completionListForTransitivelyExportedMembers01.ts create mode 100644 tests/cases/fourslash/completionListForTransitivelyExportedMembers02.ts create mode 100644 tests/cases/fourslash/completionListForTransitivelyExportedMembers03.ts create mode 100644 tests/cases/fourslash/completionListForTransitivelyExportedMembers04.ts diff --git a/tests/cases/fourslash/completionListForTransitivelyExportedMembers01.ts b/tests/cases/fourslash/completionListForTransitivelyExportedMembers01.ts new file mode 100644 index 0000000000..017b04592c --- /dev/null +++ b/tests/cases/fourslash/completionListForTransitivelyExportedMembers01.ts @@ -0,0 +1,39 @@ +/// + +// @Filename: A.ts +////export interface I1 { one: number } +////export interface I2 { two: string } +////export type I1_OR_I2 = I1 | I2; +//// +////export class C1 { +//// one: string; +////} +//// +////export module Inner { +//// export interface I3 { +//// three: boolean +//// } +//// +//// export var varVar = 100; +//// export let letVar = 200; +//// export const constVar = 300; +////} + +// @Filename: B.ts +////export var bVar = "bee!"; + +// @Filename: C.ts +////export var cVar = "see!"; +////export * from "A"; +////export * from "B" + +// @Filename: D.ts +////import * as c from "C"; +////var x = c./**/ + +goTo.marker(); +verify.completionListContains("C1"); +verify.completionListContains("Inner"); +verify.completionListContains("bVar"); +verify.completionListContains("cVar"); +verify.not.completionListContains("__export"); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListForTransitivelyExportedMembers02.ts b/tests/cases/fourslash/completionListForTransitivelyExportedMembers02.ts new file mode 100644 index 0000000000..868859746b --- /dev/null +++ b/tests/cases/fourslash/completionListForTransitivelyExportedMembers02.ts @@ -0,0 +1,39 @@ +/// + + +// @Filename: A.ts +////export interface I1 { one: number } +////export interface I2 { two: string } +////export type I1_OR_I2 = I1 | I2; +//// +////export class C1 { +//// one: string; +////} +//// +////export module Inner { +//// export interface I3 { +//// three: boolean +//// } +//// +//// export var varVar = 100; +//// export let letVar = 200; +//// export const constVar = 300; +////} + +// @Filename: B.ts +////export var bVar = "bee!"; + +// @Filename: C.ts +////export var cVar = "see!"; +////export * from "A"; +////export * from "B" + +// @Filename: D.ts +////import * as c from "C"; +////var x = c.Inner./**/ + +goTo.marker(); +verify.completionListContains("varVar"); +verify.completionListContains("letVar"); +verify.completionListContains("constVar"); +verify.not.completionListContains("__export"); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListForTransitivelyExportedMembers03.ts b/tests/cases/fourslash/completionListForTransitivelyExportedMembers03.ts new file mode 100644 index 0000000000..78ef3ec7c7 --- /dev/null +++ b/tests/cases/fourslash/completionListForTransitivelyExportedMembers03.ts @@ -0,0 +1,40 @@ +/// + + +// @Filename: A.ts +////export interface I1 { one: number } +////export interface I2 { two: string } +////export type I1_OR_I2 = I1 | I2; +//// +////export class C1 { +//// one: string; +////} +//// +////export module Inner { +//// export interface I3 { +//// three: boolean +//// } +//// +//// export var varVar = 100; +//// export let letVar = 200; +//// export const constVar = 300; +////} + +// @Filename: B.ts +////export var bVar = "bee!"; + +// @Filename: C.ts +////export var cVar = "see!"; +////export * from "A"; +////export * from "B" + +// @Filename: D.ts +////import * as c from "C"; +////var x: c./**/ + +goTo.marker(); +verify.completionListContains("I1"); +verify.completionListContains("I2"); +verify.completionListContains("I1_OR_I2"); +verify.completionListContains("C1"); +verify.not.completionListContains("__export"); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListForTransitivelyExportedMembers04.ts b/tests/cases/fourslash/completionListForTransitivelyExportedMembers04.ts new file mode 100644 index 0000000000..114e370d31 --- /dev/null +++ b/tests/cases/fourslash/completionListForTransitivelyExportedMembers04.ts @@ -0,0 +1,37 @@ +/// + + +// @Filename: A.ts +////export interface I1 { one: number } +////export interface I2 { two: string } +////export type I1_OR_I2 = I1 | I2; +//// +////export class C1 { +//// one: string; +////} +//// +////export module Inner { +//// export interface I3 { +//// three: boolean +//// } +//// +//// export var varVar = 100; +//// export let letVar = 200; +//// export const constVar = 300; +////} + +// @Filename: B.ts +////export var bVar = "bee!"; + +// @Filename: C.ts +////export var cVar = "see!"; +////export * from "A"; +////export * from "B" + +// @Filename: D.ts +////import * as c from "C"; +////var x: c.Inner./**/ + +goTo.marker(); +verify.completionListContains("I3"); +verify.not.completionListContains("__export"); \ No newline at end of file From fd3b4ca9cd8a24a1efcfc1f9bc0c4c168942433a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 24 Mar 2015 18:45:22 -0700 Subject: [PATCH 2/8] Fixed transitive export completion list issue. --- src/compiler/checker.ts | 8 ++++++-- src/compiler/types.ts | 5 +++-- src/services/services.ts | 9 ++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cc614a3469..73bf603c68 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -74,7 +74,10 @@ module ts { isImplementationOfOverload, getAliasedSymbol: resolveAlias, getEmitResolver, - getExportsOfExternalModule, + getExportsOfImportDeclaration, + getExportsOfModule(moduleSymbol: Symbol): Symbol[] { + return mapToArray(getExportsOfModule(moduleSymbol)); + } }; let unknownSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "unknown"); @@ -794,6 +797,7 @@ module ts { } function getExportsOfSymbol(symbol: Symbol): SymbolTable { + // TODO (drosen): Why do we not use getExportsOfModule for exteral modules as weel? return symbol.flags & SymbolFlags.Module ? getExportsOfModule(symbol) : symbol.exports; } @@ -2921,7 +2925,7 @@ module ts { return result; } - function getExportsOfExternalModule(node: ImportDeclaration): Symbol[]{ + function getExportsOfImportDeclaration(node: ImportDeclaration): Symbol[] { if (!node.moduleSpecifier) { return emptyArray; } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index e615a9d0bb..d6edc5300d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -902,7 +902,7 @@ module ts { // import "mod" => importClause = undefined, moduleSpecifier = "mod" // In rest of the cases, module specifier is string literal corresponding to module // ImportClause information is shown at its declaration below. - export interface ImportDeclaration extends Statement, ModuleElement { + export interface ImportDeclaration extends ModuleElement { importClause?: ImportClause; moduleSpecifier: Expression; } @@ -1115,7 +1115,8 @@ module ts { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; + getExportsOfImportDeclaration(node: ImportDeclaration): Symbol[]; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; // Should not be called directly. Should only be accessed through the Program instance. /* @internal */ getDiagnostics(sourceFile?: SourceFile): Diagnostic[]; diff --git a/src/services/services.ts b/src/services/services.ts index 58fba22a71..980c79c231 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2533,8 +2533,10 @@ module ts { if (symbol && symbol.flags & SymbolFlags.HasExports) { // Extract module or enum members - forEachValue(symbol.exports, symbol => { - if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) { + let exportedMembers = typeInfoResolver.getExportsOfModule(symbol); + forEach(exportedMembers, symbol => { + if (!(symbol.flags & SymbolFlags.ExportStar) + && typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) { symbols.push(symbol); } }); @@ -2577,7 +2579,8 @@ module ts { if (showCompletionsInImportsClause(previousToken)) { let importDeclaration = getAncestor(previousToken, SyntaxKind.ImportDeclaration); Debug.assert(importDeclaration !== undefined); - let exports = typeInfoResolver.getExportsOfExternalModule(importDeclaration); + + let exports = typeInfoResolver.getExportsOfImportDeclaration(importDeclaration); symbols = filterModuleExports(exports, importDeclaration); } } From d1fa506db6e7454619af4266bbb401e41d7e99a1 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 25 Mar 2015 17:36:51 -0700 Subject: [PATCH 3/8] Use 'symbolsToArray' to avoid filtering. --- src/compiler/checker.ts | 4 +--- src/services/services.ts | 7 +++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index e2d668b805..c1ce686938 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -75,9 +75,7 @@ module ts { getAliasedSymbol: resolveAlias, getEmitResolver, getExportsOfImportDeclaration, - getExportsOfModule(moduleSymbol: Symbol): Symbol[] { - return mapToArray(getExportsOfModule(moduleSymbol)); - } + getExportsOfModule: moduleSymbol => symbolsToArray(getExportsOfModule(moduleSymbol)), }; let unknownSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "unknown"); diff --git a/src/services/services.ts b/src/services/services.ts index cd62d7fce8..6a0925460a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2535,10 +2535,9 @@ module ts { if (symbol && symbol.flags & SymbolFlags.HasExports) { // Extract module or enum members - let exportedMembers = typeInfoResolver.getExportsOfModule(symbol); - forEach(exportedMembers, symbol => { - if (!(symbol.flags & SymbolFlags.ExportStar) - && typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) { + let exportedSymbols = typeInfoResolver.getExportsOfModule(symbol); + forEach(exportedSymbols, symbol => { + if (typeInfoResolver.isValidPropertyAccess((node.parent), symbol.name)) { symbols.push(symbol); } }); From 82222472b5ae75ae59574d28300970c1c32a032f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 25 Mar 2015 18:01:57 -0700 Subject: [PATCH 4/8] Subsume 'getExportsOfImportDeclaration' with 'getExportsOfModule'. --- src/compiler/checker.ts | 1 - src/compiler/types.ts | 1 - src/services/services.ts | 12 ++++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c1ce686938..7435fd095b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -74,7 +74,6 @@ module ts { isImplementationOfOverload, getAliasedSymbol: resolveAlias, getEmitResolver, - getExportsOfImportDeclaration, getExportsOfModule: moduleSymbol => symbolsToArray(getExportsOfModule(moduleSymbol)), }; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 609baef833..6a2677fe72 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1127,7 +1127,6 @@ module ts { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfImportDeclaration(node: ImportDeclaration): Symbol[]; getExportsOfModule(moduleSymbol: Symbol): Symbol[]; // Should not be called directly. Should only be accessed through the Program instance. diff --git a/src/services/services.ts b/src/services/services.ts index 6a0925460a..44c0d2d820 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2581,8 +2581,16 @@ module ts { let importDeclaration = getAncestor(contextToken, SyntaxKind.ImportDeclaration); Debug.assert(importDeclaration !== undefined); - let exports = typeInfoResolver.getExportsOfImportDeclaration(importDeclaration); - symbols = filterModuleExports(exports, importDeclaration); + let exports: Symbol[]; + if (importDeclaration.moduleSpecifier) { + let moduleSpecifierSymbol = typeInfoResolver.getSymbolAtLocation(importDeclaration.moduleSpecifier); + if (moduleSpecifierSymbol) { + exports = typeInfoResolver.getExportsOfModule(moduleSpecifierSymbol); + } + } + + //let exports = typeInfoResolver.getExportsOfImportDeclaration(importDeclaration); + symbols = exports ? filterModuleExports(exports, importDeclaration) : emptyArray; } } else { From 77492382ea43bf7c5d53ddc85936509cbbee4d34 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 25 Mar 2015 18:08:46 -0700 Subject: [PATCH 5/8] Updated API baselines. --- tests/baselines/reference/APISample_compile.js | 4 ++-- tests/baselines/reference/APISample_compile.types | 11 +++++------ tests/baselines/reference/APISample_linter.js | 4 ++-- tests/baselines/reference/APISample_linter.types | 11 +++++------ tests/baselines/reference/APISample_transform.js | 4 ++-- tests/baselines/reference/APISample_transform.types | 11 +++++------ tests/baselines/reference/APISample_watcher.js | 4 ++-- tests/baselines/reference/APISample_watcher.types | 11 +++++------ 8 files changed, 28 insertions(+), 32 deletions(-) diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 07d5e4337a..49159b322e 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -746,7 +746,7 @@ declare module "typescript" { interface ExternalModuleReference extends Node { expression?: Expression; } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { importClause?: ImportClause; moduleSpecifier: Expression; } @@ -888,7 +888,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; } interface SymbolDisplayBuilder { buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index eff47a4cb7..86003fc494 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -2269,9 +2269,8 @@ declare module "typescript" { >expression : Expression >Expression : Expression } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { >ImportDeclaration : ImportDeclaration ->Statement : Statement >ModuleElement : ModuleElement importClause?: ImportClause; @@ -2780,10 +2779,10 @@ declare module "typescript" { >Symbol : Symbol >Symbol : Symbol - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; ->getExportsOfExternalModule : (node: ImportDeclaration) => Symbol[] ->node : ImportDeclaration ->ImportDeclaration : ImportDeclaration + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; +>getExportsOfModule : (moduleSymbol: Symbol) => Symbol[] +>moduleSymbol : Symbol +>Symbol : Symbol >Symbol : Symbol } interface SymbolDisplayBuilder { diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index b57acaf0e9..f7902f8599 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -777,7 +777,7 @@ declare module "typescript" { interface ExternalModuleReference extends Node { expression?: Expression; } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { importClause?: ImportClause; moduleSpecifier: Expression; } @@ -919,7 +919,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; } interface SymbolDisplayBuilder { buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 600bf5c6ad..41cf18cc3f 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2415,9 +2415,8 @@ declare module "typescript" { >expression : Expression >Expression : Expression } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { >ImportDeclaration : ImportDeclaration ->Statement : Statement >ModuleElement : ModuleElement importClause?: ImportClause; @@ -2926,10 +2925,10 @@ declare module "typescript" { >Symbol : Symbol >Symbol : Symbol - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; ->getExportsOfExternalModule : (node: ImportDeclaration) => Symbol[] ->node : ImportDeclaration ->ImportDeclaration : ImportDeclaration + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; +>getExportsOfModule : (moduleSymbol: Symbol) => Symbol[] +>moduleSymbol : Symbol +>Symbol : Symbol >Symbol : Symbol } interface SymbolDisplayBuilder { diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 4004007508..68c51a8f65 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -778,7 +778,7 @@ declare module "typescript" { interface ExternalModuleReference extends Node { expression?: Expression; } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { importClause?: ImportClause; moduleSpecifier: Expression; } @@ -920,7 +920,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; } interface SymbolDisplayBuilder { buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index 4ea9c49d75..de371435b4 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2365,9 +2365,8 @@ declare module "typescript" { >expression : Expression >Expression : Expression } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { >ImportDeclaration : ImportDeclaration ->Statement : Statement >ModuleElement : ModuleElement importClause?: ImportClause; @@ -2876,10 +2875,10 @@ declare module "typescript" { >Symbol : Symbol >Symbol : Symbol - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; ->getExportsOfExternalModule : (node: ImportDeclaration) => Symbol[] ->node : ImportDeclaration ->ImportDeclaration : ImportDeclaration + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; +>getExportsOfModule : (moduleSymbol: Symbol) => Symbol[] +>moduleSymbol : Symbol +>Symbol : Symbol >Symbol : Symbol } interface SymbolDisplayBuilder { diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 34503a0d81..02c8bdb688 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -815,7 +815,7 @@ declare module "typescript" { interface ExternalModuleReference extends Node { expression?: Expression; } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { importClause?: ImportClause; moduleSpecifier: Expression; } @@ -957,7 +957,7 @@ declare module "typescript" { getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; getAliasedSymbol(symbol: Symbol): Symbol; - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; } interface SymbolDisplayBuilder { buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 3903e169b4..1114e9680f 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2538,9 +2538,8 @@ declare module "typescript" { >expression : Expression >Expression : Expression } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { >ImportDeclaration : ImportDeclaration ->Statement : Statement >ModuleElement : ModuleElement importClause?: ImportClause; @@ -3049,10 +3048,10 @@ declare module "typescript" { >Symbol : Symbol >Symbol : Symbol - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; ->getExportsOfExternalModule : (node: ImportDeclaration) => Symbol[] ->node : ImportDeclaration ->ImportDeclaration : ImportDeclaration + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; +>getExportsOfModule : (moduleSymbol: Symbol) => Symbol[] +>moduleSymbol : Symbol +>Symbol : Symbol >Symbol : Symbol } interface SymbolDisplayBuilder { From 19211b12928fc489b62176ff1db3081cb6f1552b Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 25 Mar 2015 18:40:06 -0700 Subject: [PATCH 6/8] Got rid of 'getExportsOfImportDeclaration'. --- src/compiler/checker.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7435fd095b..6bd75c5d28 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3001,17 +3001,6 @@ module ts { return result; } - function getExportsOfImportDeclaration(node: ImportDeclaration): Symbol[] { - if (!node.moduleSpecifier) { - return emptyArray; - } - let module = resolveExternalModuleName(node, node.moduleSpecifier); - if (!module) { - return emptyArray; - } - return symbolsToArray(getExportsOfModule(module)); - } - function getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature { let links = getNodeLinks(declaration); if (!links.resolvedSignature) { From 54e1928b2ac048bc3a69ea1ec7516cd5cc04a62d Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 31 Mar 2015 18:34:43 -0700 Subject: [PATCH 7/8] Moved arrow function to function declaration. --- src/compiler/checker.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6bd75c5d28..b2f6e1634c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -74,7 +74,7 @@ module ts { isImplementationOfOverload, getAliasedSymbol: resolveAlias, getEmitResolver, - getExportsOfModule: moduleSymbol => symbolsToArray(getExportsOfModule(moduleSymbol)), + getExportsOfModule: getExportsOfModuleAsArray, }; let unknownSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "unknown"); @@ -872,6 +872,10 @@ module ts { return moduleSymbol.exports["export="]; } + function getExportsOfModuleAsArray(moduleSymbol: Symbol): Symbol[] { + return symbolsToArray(getExportsOfModule(moduleSymbol)); + } + function getExportsOfSymbol(symbol: Symbol): SymbolTable { return symbol.flags & SymbolFlags.Module ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; } From 3290814b714b932a2e842c6988b62cd085008d10 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 1 Apr 2015 12:31:39 -0700 Subject: [PATCH 8/8] Update test. --- tests/baselines/reference/APISample_linter.types.pull | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/baselines/reference/APISample_linter.types.pull b/tests/baselines/reference/APISample_linter.types.pull index e2a29716fc..68ff796104 100644 --- a/tests/baselines/reference/APISample_linter.types.pull +++ b/tests/baselines/reference/APISample_linter.types.pull @@ -2453,9 +2453,8 @@ declare module "typescript" { >expression : Expression >Expression : Expression } - interface ImportDeclaration extends Statement, ModuleElement { + interface ImportDeclaration extends ModuleElement { >ImportDeclaration : ImportDeclaration ->Statement : Statement >ModuleElement : ModuleElement importClause?: ImportClause; @@ -2964,10 +2963,10 @@ declare module "typescript" { >Symbol : Symbol >Symbol : Symbol - getExportsOfExternalModule(node: ImportDeclaration): Symbol[]; ->getExportsOfExternalModule : (node: ImportDeclaration) => Symbol[] ->node : ImportDeclaration ->ImportDeclaration : ImportDeclaration + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; +>getExportsOfModule : (moduleSymbol: Symbol) => Symbol[] +>moduleSymbol : Symbol +>Symbol : Symbol >Symbol : Symbol } interface SymbolDisplayBuilder {