Skip to content

Commit 5141ce7

Browse files
author
Andy
authored
Deduplicate unresolvedImports (#17248)
* Deduplicate unresolvedImports * Add `isNonDuplicateInSortedArray` helper
1 parent f69ce5c commit 5141ce7

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

src/compiler/core.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,11 @@ namespace ts {
361361
return false;
362362
}
363363

364-
export function filterMutate<T>(array: T[], f: (x: T) => boolean): void {
364+
export function filterMutate<T>(array: T[], f: (x: T, i: number, array: T[]) => boolean): void {
365365
let outIndex = 0;
366-
for (const item of array) {
367-
if (f(item)) {
368-
array[outIndex] = item;
366+
for (let i = 0; i < array.length; i++) {
367+
if (f(array[i], i, array)) {
368+
array[outIndex] = array[i];
369369
outIndex++;
370370
}
371371
}

src/server/project.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ namespace ts.server {
495495
this.projectStateVersion++;
496496
}
497497

498-
private extractUnresolvedImportsFromSourceFile(file: SourceFile, result: string[]) {
498+
private extractUnresolvedImportsFromSourceFile(file: SourceFile, result: Push<string>) {
499499
const cached = this.cachedUnresolvedImportsPerFile.get(file.path);
500500
if (cached) {
501501
// found cached result - use it and return
@@ -555,7 +555,7 @@ namespace ts.server {
555555
for (const sourceFile of this.program.getSourceFiles()) {
556556
this.extractUnresolvedImportsFromSourceFile(sourceFile, result);
557557
}
558-
this.lastCachedUnresolvedImportsList = toSortedArray(result);
558+
this.lastCachedUnresolvedImportsList = toDeduplicatedSortedArray(result);
559559
}
560560
unresolvedImports = this.lastCachedUnresolvedImportsList;
561561

src/server/utilities.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,15 @@ namespace ts.server {
262262
return arr as SortedArray<T>;
263263
}
264264

265+
export function toDeduplicatedSortedArray(arr: string[]): SortedArray<string> {
266+
arr.sort();
267+
filterMutate(arr, isNonDuplicateInSortedArray);
268+
return arr as SortedArray<string>;
269+
}
270+
function isNonDuplicateInSortedArray<T>(value: T, index: number, array: T[]) {
271+
return index === 0 || value !== array[index - 1];
272+
}
273+
265274
export function enumerateInsertsAndDeletes<T>(newItems: SortedReadonlyArray<T>, oldItems: SortedReadonlyArray<T>, inserted: (newItem: T) => void, deleted: (oldItem: T) => void, compare?: Comparer<T>) {
266275
compare = compare || compareValues;
267276
let newIndex = 0;

src/services/jsTyping.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace ts.JsTyping {
3535
"crypto", "stream", "util", "assert", "tty", "domain",
3636
"constants", "process", "v8", "timers", "console"];
3737

38-
const nodeCoreModules = arrayToMap(<string[]>nodeCoreModuleList, x => x);
38+
const nodeCoreModules = arrayToSet(nodeCoreModuleList);
3939

4040
/**
4141
* A map of loose file names to library names that we are confident require typings

0 commit comments

Comments
 (0)