From e48312df54be770f7c097fad1bca77dc407be260 Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Tue, 9 Jan 2018 16:54:58 -0800 Subject: [PATCH] De-dup typing module completions --- src/services/pathCompletions.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/services/pathCompletions.ts b/src/services/pathCompletions.ts index f6f6667bbec..98b1737adf3 100644 --- a/src/services/pathCompletions.ts +++ b/src/services/pathCompletions.ts @@ -312,10 +312,11 @@ namespace ts.Completions.PathCompletions { function getCompletionEntriesFromTypings(host: LanguageServiceHost, options: CompilerOptions, scriptPath: string, span: TextSpan, result: CompletionEntry[] = []): CompletionEntry[] { // Check for typings specified in compiler options + let seen = createMap(); if (options.types) { for (const typesName of options.types) { const moduleName = getPackageNameFromAtTypesDirectoryWithoutPrefix(typesName); - result.push(createCompletionEntryForModule(moduleName, ScriptElementKind.externalModuleName, span)); + pushResult(moduleName); } } else if (host.getDirectories) { @@ -349,11 +350,18 @@ namespace ts.Completions.PathCompletions { typeDirectory = normalizePath(typeDirectory); const directoryName = getBaseFileName(typeDirectory); const moduleName = getPackageNameFromAtTypesDirectoryWithoutPrefix(directoryName); - result.push(createCompletionEntryForModule(moduleName, ScriptElementKind.externalModuleName, span)); + pushResult(moduleName); } } } } + + function pushResult(moduleName: string) { + if (!seen.has(moduleName)) { + result.push(createCompletionEntryForModule(moduleName, ScriptElementKind.externalModuleName, span)); + seen.set(moduleName, true); + } + } } function findPackageJsons(directory: string, host: LanguageServiceHost): string[] {