From 66b3fae09a2be47ed0aaa4c052cc1b2ea9a875ed Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 23 Mar 2015 21:44:27 -0700 Subject: [PATCH] Remove the active completion session. --- src/services/services.ts | 47 ++++++------------- .../baselines/reference/APISample_compile.js | 2 +- .../reference/APISample_compile.types | 7 ++- tests/baselines/reference/APISample_linter.js | 2 +- .../reference/APISample_linter.types | 7 ++- .../reference/APISample_transform.js | 2 +- .../reference/APISample_transform.types | 7 ++- .../baselines/reference/APISample_watcher.js | 2 +- .../reference/APISample_watcher.types | 7 ++- 9 files changed, 39 insertions(+), 44 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 5225bca5daf..f0a823d2d10 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1409,14 +1409,6 @@ module ts { /// Language Service - interface CompletionSession { - fileName: string; // the file where the completion was requested - position: number; // position in the file where the completion was requested - entries: CompletionEntry[]; // entries for this completion - symbols: Map; // symbols by entry name map - typeChecker: TypeChecker; // the typeChecker used to generate this completion - } - interface FormattingOptions { useTabs: boolean; spacesPerTab: number; @@ -2180,7 +2172,6 @@ module ts { let typeInfoResolver: TypeChecker; let useCaseSensitivefileNames = false; let cancellationToken = new CancellationTokenObject(host.getCancellationToken && host.getCancellationToken()); - let activeCompletionSession: CompletionSession; // The current active completion session, used to get the completion entry details // Check if the localized messages json is set, otherwise query the host for it if (!localizedDiagnosticMessages && host.getLocalizedDiagnosticMessages) { @@ -2918,41 +2909,32 @@ module ts { return undefined; } - // Clear the current activeCompletionSession for this session - activeCompletionSession = { - fileName: fileName, - position: position, - entries: [], - symbols: {}, - typeChecker: typeInfoResolver - }; - - getCompletionEntriesFromSymbols(symbols, activeCompletionSession); + var entries = getCompletionEntriesFromSymbols(symbols); // Add keywords if this is not a member completion list if (!isMemberCompletion) { - addRange(activeCompletionSession.entries, keywordCompletions); + addRange(entries, keywordCompletions); } - return { - isMemberCompletion, - isNewIdentifierLocation, - entries: activeCompletionSession.entries - }; + return { isMemberCompletion, isNewIdentifierLocation, entries }; - function getCompletionEntriesFromSymbols(symbols: Symbol[], session: CompletionSession): void { + function getCompletionEntriesFromSymbols(symbols: Symbol[]): CompletionEntry[] { let start = new Date().getTime(); + var entries: CompletionEntry[] = []; + var nameToSymbol: Map = {}; + forEach(symbols, symbol => { - let entry = createCompletionEntry(symbol, session.typeChecker, location); + let entry = createCompletionEntry(symbol, typeInfoResolver, location); if (entry) { let id = escapeIdentifier(entry.name); - if (!lookUp(session.symbols, id)) { - session.entries.push(entry); - session.symbols[id] = symbol; + if (!lookUp(nameToSymbol, id)) { + entries.push(entry); + nameToSymbol[id] = symbol; } } }); log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start)); + return entries; } } @@ -2962,7 +2944,7 @@ module ts { // Look up a completion symbol with this name. let result = getCompletionSymbols(fileName, position, entryName); if (result) { - let { symbols, isMemberCompletion, isNewIdentifierLocation, location } = result; + let { symbols, location } = result; if (symbols && symbols.length > 0) { let symbol = symbols[0]; let displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getValidSourceFile(fileName), location, typeInfoResolver, location, SemanticMeaning.All); @@ -2975,7 +2957,8 @@ module ts { }; } } - + + // Didn't find a symbol with this name. See if we can find a keyword instead. let keywordCompletion = filter(keywordCompletions, c => c.name === entryName); if (keywordCompletion) { return { diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index b8f4c7cdd13..625c49177fd 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -860,7 +860,7 @@ declare module "typescript" { getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getShorthandAssignmentValueSymbol(location: Node): Symbol; getTypeAtLocation(node: Node): Type; diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index e1d9aa58961..d22b4499391 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -2632,12 +2632,15 @@ declare module "typescript" { >Signature : Signature >Type : Type - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; ->getSymbolsInScope : (location: Node, meaning: SymbolFlags) => Symbol[] + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; +>getSymbolsInScope : (location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean) => Symbol[] >location : Node >Node : Node >meaning : SymbolFlags >SymbolFlags : SymbolFlags +>predicate : (symbol: Symbol) => boolean +>symbol : Symbol +>Symbol : Symbol >Symbol : Symbol getSymbolAtLocation(node: Node): Symbol; diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index 4e3af8d1be0..93dd106e65e 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -891,7 +891,7 @@ declare module "typescript" { getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getShorthandAssignmentValueSymbol(location: Node): Symbol; getTypeAtLocation(node: Node): Type; diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index 7cf542f0b40..0a4577817e3 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -2778,12 +2778,15 @@ declare module "typescript" { >Signature : Signature >Type : Type - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; ->getSymbolsInScope : (location: Node, meaning: SymbolFlags) => Symbol[] + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; +>getSymbolsInScope : (location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean) => Symbol[] >location : Node >Node : Node >meaning : SymbolFlags >SymbolFlags : SymbolFlags +>predicate : (symbol: Symbol) => boolean +>symbol : Symbol +>Symbol : Symbol >Symbol : Symbol getSymbolAtLocation(node: Node): Symbol; diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 261ad5b25f6..eb870ba15e3 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -892,7 +892,7 @@ declare module "typescript" { getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getShorthandAssignmentValueSymbol(location: Node): Symbol; getTypeAtLocation(node: Node): Type; diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index eb4c7ab122f..6afd50403f2 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -2728,12 +2728,15 @@ declare module "typescript" { >Signature : Signature >Type : Type - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; ->getSymbolsInScope : (location: Node, meaning: SymbolFlags) => Symbol[] + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; +>getSymbolsInScope : (location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean) => Symbol[] >location : Node >Node : Node >meaning : SymbolFlags >SymbolFlags : SymbolFlags +>predicate : (symbol: Symbol) => boolean +>symbol : Symbol +>Symbol : Symbol >Symbol : Symbol getSymbolAtLocation(node: Node): Symbol; diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index a821bc5011d..a7ee033d855 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -929,7 +929,7 @@ declare module "typescript" { getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getShorthandAssignmentValueSymbol(location: Node): Symbol; getTypeAtLocation(node: Node): Type; diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index 47e5a0147fd..30e97cc5ba2 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -2901,12 +2901,15 @@ declare module "typescript" { >Signature : Signature >Type : Type - getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; ->getSymbolsInScope : (location: Node, meaning: SymbolFlags) => Symbol[] + getSymbolsInScope(location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean): Symbol[]; +>getSymbolsInScope : (location: Node, meaning: SymbolFlags, predicate?: (symbol: Symbol) => boolean) => Symbol[] >location : Node >Node : Node >meaning : SymbolFlags >SymbolFlags : SymbolFlags +>predicate : (symbol: Symbol) => boolean +>symbol : Symbol +>Symbol : Symbol >Symbol : Symbol getSymbolAtLocation(node: Node): Symbol;