From 763d17e947fc8bafc66f586e42697128361ae543 Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 24 Oct 2017 14:17:29 -0700 Subject: [PATCH] Manually inline a few cases to reduce repeated 'ignoreCase' conditionals in loops --- src/compiler/core.ts | 10 ++++++---- src/compiler/program.ts | 3 ++- src/services/navigateTo.ts | 5 +---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index ddcd8c849e7..f11ace7f6c4 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1975,8 +1975,9 @@ namespace ts { const aComponents = getNormalizedPathComponents(a, currentDirectory); const bComponents = getNormalizedPathComponents(b, currentDirectory); const sharedLength = Math.min(aComponents.length, bComponents.length); + const stringComparer = ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive; for (let i = 0; i < sharedLength; i++) { - const result = compareStrings(aComponents[i], bComponents[i], ignoreCase); + const result = stringComparer(aComponents[i], bComponents[i]); if (result !== Comparison.EqualTo) { return result; } @@ -1997,8 +1998,9 @@ namespace ts { return false; } + const stringComparer = ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive; for (let i = 0; i < parentComponents.length; i++) { - const result = compareStrings(parentComponents[i], childComponents[i], ignoreCase); + const result = stringComparer(parentComponents[i], childComponents[i]); if (result !== Comparison.EqualTo) { return false; } @@ -2255,7 +2257,7 @@ namespace ts { // If there are no "includes", then just put everything in results[0]. const results: string[][] = includeFileRegexes ? includeFileRegexes.map(() => []) : [[]]; - const comparer = useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive; + const comparer = useCaseSensitiveFileNames ? compareStringsCaseSensitive : compareStringsCaseInsensitive; for (const basePath of patterns.basePaths) { visitDirectory(basePath, combinePaths(currentDirectory, basePath), depth); } @@ -2320,7 +2322,7 @@ namespace ts { } // Sort the offsets array using either the literal or canonical path representations. - includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive); + includeBasePaths.sort(useCaseSensitiveFileNames ? compareStringsCaseSensitive : compareStringsCaseInsensitive); // Iterate over each include base path and include unique base paths that are not a // subpath of an existing base path diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 0ff78a77ecd..e87a4997f13 100755 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1105,7 +1105,8 @@ namespace ts { return compareStrings(file.fileName, getDefaultLibraryFileName(), /*ignoreCase*/ !host.useCaseSensitiveFileNames()) === Comparison.EqualTo; } else { - return forEach(options.lib, libFileName => compareStrings(file.fileName, combinePaths(defaultLibraryPath, libFileName), /*ignoreCase*/ !host.useCaseSensitiveFileNames()) === Comparison.EqualTo); + const stringComparer = host.useCaseSensitiveFileNames() ? compareStringsCaseSensitive : compareStringsCaseInsensitive; + return forEach(options.lib, libFileName => stringComparer(file.fileName, combinePaths(defaultLibraryPath, libFileName)) === Comparison.EqualTo); } } diff --git a/src/services/navigateTo.ts b/src/services/navigateTo.ts index 7fa177b6a30..be2c7b61a7e 100644 --- a/src/services/navigateTo.ts +++ b/src/services/navigateTo.ts @@ -176,11 +176,8 @@ namespace ts.NavigateTo { function compareNavigateToItems(i1: RawNavigateToItem, i2: RawNavigateToItem): number { // TODO(cyrusn): get the gamut of comparisons that VS already uses here. // Right now we just sort by kind first, and then by name of the item. - // We first sort case insensitively. So "Aaa" will come before "bar". - // Then we sort case sensitively, so "aaa" will come before "Aaa". return i1.matchKind - i2.matchKind || - ts.compareStringsCaseInsensitive(i1.name, i2.name) || - ts.compareStrings(i1.name, i2.name); + ts.compareStringsCaseSensitive(i1.name, i2.name); } function createNavigateToItem(rawItem: RawNavigateToItem): NavigateToItem {