mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 04:43:37 -05:00
Add editor configurable filename-based ATA (#40952)
* add typeAcquisition:inferTypings * remove unused property * handle inferred and external projects separately * update missed rename * fix tests * pass as external compilerOption * update test * remove hostConfig reference * change option name * remove extraneous property * add inferredProjectCompilerOptions
This commit is contained in:
@@ -207,6 +207,50 @@ namespace ts.projectSystem {
|
||||
checkProjectActualFiles(p, [file1.path, jquery.path]);
|
||||
});
|
||||
|
||||
it("inferred project - type acquisition with disableFilenameBasedTypeAcquisition:true", () => {
|
||||
// Tests:
|
||||
// Exclude file with disableFilenameBasedTypeAcquisition:true
|
||||
const jqueryJs = {
|
||||
path: "/a/b/jquery.js",
|
||||
content: ""
|
||||
};
|
||||
|
||||
const messages: string[] = [];
|
||||
const host = createServerHost([jqueryJs]);
|
||||
const installer = new (class extends Installer {
|
||||
constructor() {
|
||||
super(host, { typesRegistry: createTypesRegistry("jquery") }, { isEnabled: () => true, writeLine: msg => messages.push(msg) });
|
||||
}
|
||||
enqueueInstallTypingsRequest(project: server.Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray<string>) {
|
||||
super.enqueueInstallTypingsRequest(project, typeAcquisition, unresolvedImports);
|
||||
}
|
||||
installWorker(_requestId: number, _args: string[], _cwd: string, cb: TI.RequestCompletedAction): void {
|
||||
const installedTypings: string[] = [];
|
||||
const typingFiles: File[] = [];
|
||||
executeCommand(this, host, installedTypings, typingFiles, cb);
|
||||
}
|
||||
})();
|
||||
|
||||
const projectService = createProjectService(host, { typingsInstaller: installer });
|
||||
projectService.setCompilerOptionsForInferredProjects({
|
||||
allowJs: true,
|
||||
enable: true,
|
||||
disableFilenameBasedTypeAcquisition: true
|
||||
});
|
||||
projectService.openClientFile(jqueryJs.path);
|
||||
|
||||
checkNumberOfProjects(projectService, { inferredProjects: 1 });
|
||||
const p = projectService.inferredProjects[0];
|
||||
checkProjectActualFiles(p, [jqueryJs.path]);
|
||||
|
||||
installer.installAll(/*expectedCount*/ 0);
|
||||
host.checkTimeoutQueueLengthAndRun(2);
|
||||
checkNumberOfProjects(projectService, { inferredProjects: 1 });
|
||||
// files should not be removed from project if ATA is skipped
|
||||
checkProjectActualFiles(p, [jqueryJs.path]);
|
||||
assert.isTrue(messages.indexOf("No new typings were requested as a result of typings discovery") > 0, "Should not request filename-based typings");
|
||||
});
|
||||
|
||||
it("external project - no type acquisition, no .d.ts/js files", () => {
|
||||
const file1 = {
|
||||
path: "/a/b/app.ts",
|
||||
@@ -434,6 +478,51 @@ namespace ts.projectSystem {
|
||||
|
||||
installer.checkPendingCommands(/*expectedCount*/ 0);
|
||||
});
|
||||
|
||||
it("external project - type acquisition with disableFilenameBasedTypeAcquisition:true", () => {
|
||||
// Tests:
|
||||
// Exclude file with disableFilenameBasedTypeAcquisition:true
|
||||
const jqueryJs = {
|
||||
path: "/a/b/jquery.js",
|
||||
content: ""
|
||||
};
|
||||
|
||||
const messages: string[] = [];
|
||||
const host = createServerHost([jqueryJs]);
|
||||
const installer = new (class extends Installer {
|
||||
constructor() {
|
||||
super(host, { typesRegistry: createTypesRegistry("jquery") }, { isEnabled: () => true, writeLine: msg => messages.push(msg) });
|
||||
}
|
||||
enqueueInstallTypingsRequest(project: server.Project, typeAcquisition: TypeAcquisition, unresolvedImports: SortedReadonlyArray<string>) {
|
||||
super.enqueueInstallTypingsRequest(project, typeAcquisition, unresolvedImports);
|
||||
}
|
||||
installWorker(_requestId: number, _args: string[], _cwd: string, cb: TI.RequestCompletedAction): void {
|
||||
const installedTypings: string[] = [];
|
||||
const typingFiles: File[] = [];
|
||||
executeCommand(this, host, installedTypings, typingFiles, cb);
|
||||
}
|
||||
})();
|
||||
|
||||
const projectFileName = "/a/app/test.csproj";
|
||||
const projectService = createProjectService(host, { typingsInstaller: installer });
|
||||
projectService.openExternalProject({
|
||||
projectFileName,
|
||||
options: { allowJS: true, moduleResolution: ModuleResolutionKind.NodeJs },
|
||||
rootFiles: [toExternalFile(jqueryJs.path)],
|
||||
typeAcquisition: { enable: true, disableFilenameBasedTypeAcquisition: true }
|
||||
});
|
||||
|
||||
const p = projectService.externalProjects[0];
|
||||
projectService.checkNumberOfProjects({ externalProjects: 1 });
|
||||
checkProjectActualFiles(p, [jqueryJs.path]);
|
||||
|
||||
installer.installAll(/*expectedCount*/ 0);
|
||||
projectService.checkNumberOfProjects({ externalProjects: 1 });
|
||||
// files should not be removed from project if ATA is skipped
|
||||
checkProjectActualFiles(p, [jqueryJs.path]);
|
||||
assert.isTrue(messages.indexOf("No new typings were requested as a result of typings discovery") > 0, "Should not request filename-based typings");
|
||||
});
|
||||
|
||||
it("external project - no type acquisition, with js & ts files", () => {
|
||||
// Tests:
|
||||
// 1. No typings are included for JS projects when the project contains ts files
|
||||
|
||||
Reference in New Issue
Block a user