diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index f75e800e474..23e6b53295e 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -407,11 +407,8 @@ namespace ts { // directory: /a/b/c/d/e // resolvedFileName: /a/b/foo.d.ts // commonPrefix: /a/b - // for failed lookups use the root directory as commonPrefix - const commonPrefix = resolvedFileName ? getCommonPrefix(path, resolvedFileName) : path.substr(0, getRootLength(path)); - if (!commonPrefix) { - return; - } + // for failed lookups cache the result for every directory up to root + const commonPrefix = resolvedFileName && getCommonPrefix(path, resolvedFileName); let current = path; while (current !== commonPrefix) { const parent = getDirectoryPath(current); diff --git a/src/testRunner/unittests/moduleResolution.ts b/src/testRunner/unittests/moduleResolution.ts index 3c5ab7682ac..2dd75d75f57 100644 --- a/src/testRunner/unittests/moduleResolution.ts +++ b/src/testRunner/unittests/moduleResolution.ts @@ -262,7 +262,7 @@ namespace ts { failedLookupLocations: [], }); assert.isDefined(cache.get("c:/foo")); - assert.isUndefined(cache.get("c:/")); + assert.isDefined(cache.get("c:/")); assert.isUndefined(cache.get("d:/")); cache = resolutionCache.getOrCreateCacheForModuleName("f");