Remove trailing slashes, remove mostly useless IO, fix script element kind for files

This commit is contained in:
Richard Knoll 2016-08-04 18:17:41 -07:00
parent ca288231f7
commit 0f22079d9e
9 changed files with 24 additions and 51 deletions

View File

@ -1865,7 +1865,6 @@ namespace ts {
interface VisibleModuleInfo {
moduleName: string;
moduleDir: string;
canBeImported: boolean;
}
export interface DisplayPartsSymbolWriter extends SymbolWriter {
@ -4605,7 +4604,7 @@ namespace ts {
if (!duplicate) {
result.push({
name: fileName,
kind: ScriptElementKind.directory,
kind: ScriptElementKind.scriptElement,
sortText: fileName
});
}
@ -4618,7 +4617,7 @@ namespace ts {
const directoryName = getBaseFileName(normalizePath(d));
result.push({
name: ensureTrailingDirectorySeparator(directoryName),
name: directoryName,
kind: ScriptElementKind.directory,
sortText: directoryName
});
@ -4750,7 +4749,7 @@ namespace ts {
if (!options.moduleResolution || options.moduleResolution === ModuleResolutionKind.NodeJs) {
forEach(enumerateNodeModulesVisibleToScript(host, scriptPath), visibleModule => {
if (!isNestedModule) {
nonRelativeModules.push(visibleModule.canBeImported ? visibleModule.moduleName : ensureTrailingDirectorySeparator(visibleModule.moduleName));
nonRelativeModules.push(visibleModule.moduleName);
}
else {
const nestedFiles = host.readDirectory(visibleModule.moduleDir, supportedTypeScriptExtensions, /*exclude*/undefined, /*include*/["./*"]);
@ -4904,8 +4903,7 @@ namespace ts {
const moduleDir = combinePaths(nodeModulesDir, moduleName);
result.push({
moduleName,
moduleDir,
canBeImported: moduleCanBeImported(moduleDir)
moduleDir
});
});
});
@ -4930,31 +4928,6 @@ namespace ts {
}
}
}
/*
* A module can be imported by name alone if one of the following is true:
* It defines the "typings" property in its package.json
* The module has a "main" export and an index.d.ts file
* The module has an index.ts
*/
function moduleCanBeImported(modulePath: string): boolean {
const packagePath = combinePaths(modulePath, "package.json");
let hasMainExport = false;
if (host.fileExists(packagePath)) {
const package = tryReadingPackageJson(packagePath);
if (package) {
if (package.typings) {
return true;
}
hasMainExport = !!package.main;
}
}
hasMainExport = hasMainExport || host.fileExists(combinePaths(modulePath, "index.js"));
return (hasMainExport && host.fileExists(combinePaths(modulePath, "index.d.ts"))) || host.fileExists(combinePaths(modulePath, "index.ts"));
}
}
function createCompletionEntryForModule(name: string, kind: string): ImportCompletionEntry {

View File

@ -28,4 +28,4 @@ goTo.marker("2");
verify.importModuleCompletionListContains("some-module", 2);
goTo.marker("3");
verify.importModuleCompletionListContains("fourslash/", 3);
verify.importModuleCompletionListContains("fourslash", 3);

View File

@ -25,8 +25,8 @@ const kinds = ["import_as", "import_equals", "require"];
for (const kind of kinds) {
goTo.marker(kind + "0");
verify.importModuleCompletionListContains("fake-module/");
verify.importModuleCompletionListContains("fake-module");
verify.importModuleCompletionListContains("fake-module2");
verify.importModuleCompletionListContains("fake-module3/");
verify.importModuleCompletionListContains("fake-module3");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(3);
}

View File

@ -52,8 +52,8 @@ const kinds = ["import_as", "import_equals", "require"];
for (const kind of kinds) {
goTo.marker(kind + "0");
verify.importModuleCompletionListContains("module-no-main/");
verify.importModuleCompletionListContains("module-no-main-index-d-ts/");
verify.importModuleCompletionListContains("module-no-main");
verify.importModuleCompletionListContains("module-no-main-index-d-ts");
verify.importModuleCompletionListContains("module-index-ts");
verify.importModuleCompletionListContains("module-index-d-ts-explicit-main");
verify.importModuleCompletionListContains("module-index-d-ts-default-main");

View File

@ -51,8 +51,8 @@ for (const kind of kinds) {
verify.importModuleCompletionListContains("f1");
verify.importModuleCompletionListContains("f2");
verify.importModuleCompletionListContains("e1");
verify.importModuleCompletionListContains("folder/");
verify.importModuleCompletionListContains("parentTest/");
verify.importModuleCompletionListContains("folder");
verify.importModuleCompletionListContains("parentTest");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(5);
goTo.marker(kind + "2");
@ -63,6 +63,6 @@ for (const kind of kinds) {
goTo.marker(kind + "3");
verify.importModuleCompletionListContains("f4");
verify.importModuleCompletionListContains("g1");
verify.importModuleCompletionListContains("sub/");
verify.importModuleCompletionListContains("sub");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(3);
}

View File

@ -32,18 +32,18 @@ const kinds = ["import_as", "import_equals", "require"];
for (const kind of kinds) {
goTo.marker(kind + "0");
verify.importModuleCompletionListContains("fourslash/");
verify.importModuleCompletionListContains("fourslash");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(1);
goTo.marker(kind + "1");
verify.importModuleCompletionListContains("fourslash/");
verify.importModuleCompletionListContains("fourslash");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(1);
goTo.marker(kind + "2");
verify.importModuleCompletionListContains("f1");
verify.importModuleCompletionListContains("f2");
verify.importModuleCompletionListContains("e1");
verify.importModuleCompletionListContains("folder/");
verify.importModuleCompletionListContains("tests/");
verify.importModuleCompletionListContains("folder");
verify.importModuleCompletionListContains("tests");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(5);
}

View File

@ -43,7 +43,7 @@ for (const kind of kinds) {
verify.importModuleCompletionListContains("module0");
verify.importModuleCompletionListContains("module1");
verify.importModuleCompletionListContains("module2");
verify.importModuleCompletionListContains("more/");
verify.importModuleCompletionListContains("more");
// Should not contain itself
verify.not.importModuleCompletionListItemsCountIsGreaterThan(4);

View File

@ -34,16 +34,16 @@ for (let i = 0; i < 5; i++) {
verify.importModuleCompletionListContains("f1.d.ts");
verify.importModuleCompletionListContains("f2.tsx");
verify.importModuleCompletionListContains("e1.ts");
verify.importModuleCompletionListContains("parentTest/");
verify.importModuleCompletionListContains("parentTest");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(5);
}
goTo.marker("5");
verify.importModuleCompletionListContains("g1.ts");
verify.importModuleCompletionListContains("sub/");
verify.importModuleCompletionListContains("sub");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(2);
goTo.marker("6");
verify.importModuleCompletionListContains("g1.ts");
verify.importModuleCompletionListContains("sub/");
verify.importModuleCompletionListContains("sub");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(2);

View File

@ -25,17 +25,17 @@
//// /*e2*/
goTo.marker("0");
verify.importModuleCompletionListContains("fourslash/");
verify.importModuleCompletionListContains("fourslash");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(1);
goTo.marker("1");
verify.importModuleCompletionListContains("fourslash/");
verify.importModuleCompletionListContains("fourslash");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(1);
goTo.marker("2");
verify.importModuleCompletionListContains("f1.ts");
verify.importModuleCompletionListContains("f2.tsx");
verify.importModuleCompletionListContains("e1.ts");
verify.importModuleCompletionListContains("folder/");
verify.importModuleCompletionListContains("tests/");
verify.importModuleCompletionListContains("folder");
verify.importModuleCompletionListContains("tests");
verify.not.importModuleCompletionListItemsCountIsGreaterThan(5);