From 426c28b8fd6efd1c80dabfcc6c923139f8be38fd Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 14 Jun 2019 12:40:14 -0700 Subject: [PATCH] Fix offering auto imports to paths within node modules --- src/services/codefixes/importFixes.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 558f0d134e9..66eff9efd79 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -587,14 +587,14 @@ namespace ts.codefix { cb(module); } else if (sourceFile && sourceFile !== from && isImportablePath(from.fileName, sourceFile.fileName)) { - const moduleSpecifier = getNodeModulesSpecifierFromFileName(sourceFile.fileName); + const moduleSpecifier = getNodeModulesPackageNameFromFileName(sourceFile.fileName); if (!moduleSpecifier || allowsImporting(moduleSpecifier)) { cb(module); } } }); - function getNodeModulesSpecifierFromFileName(importedFileName: string): string | undefined { + function getNodeModulesPackageNameFromFileName(importedFileName: string): string | undefined { const specifier = moduleSpecifiers.getModuleSpecifier( compilerOptions, from, @@ -605,10 +605,15 @@ namespace ts.codefix { preferences, redirectTargetsMap); - // Relative paths here are not node_modules, so we don’t care about them; + // Paths here are not node_modules, so we don’t care about them; // returning anyting will trigger a lookup in package.json. - if (!pathIsRelative(specifier)) { - return getPackageNameFromTypesPackageName(specifier); + if (!pathIsRelative(specifier) && !isRootedDiskPath(specifier)) { + const components = getPathComponents(getPackageNameFromTypesPackageName(specifier)).slice(1); + // Scoped packages + if (startsWith(components[0], "@")) { + return `${components[0]}/${components[1]}`; + } + return components[0]; } } }