From 5e37a310d709637617a40df024aadf681336718c Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Tue, 23 Aug 2016 09:50:44 -0700 Subject: [PATCH] types 2.0 WIP --- src/server/editorServices.ts | 2 +- src/server/types.d.ts | 1 + src/server/typingsCache.ts | 11 +++++++++-- src/server/typingsInstaller/typingsInstaller.ts | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 394613bebe4..4add13dd183 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -213,7 +213,7 @@ namespace ts.server { } switch (response.kind) { case "set": - this.typingsCache.updateTypingsForProject(response.projectName, response.compilerOptions, response.typingOptions, response.typings); + this.typingsCache.updateTypingsForProject(response.projectName, response.compilerOptions, response.typingOptions, response.typings, response.files); project.updateGraph(); break; case "invalidate": diff --git a/src/server/types.d.ts b/src/server/types.d.ts index b4694cc4017..3a9733cd0e2 100644 --- a/src/server/types.d.ts +++ b/src/server/types.d.ts @@ -45,6 +45,7 @@ declare namespace ts.server { readonly typingOptions: ts.TypingOptions; readonly compilerOptions: ts.CompilerOptions; readonly typings: string[]; + readonly files: string[]; readonly kind: "set"; } diff --git a/src/server/typingsCache.ts b/src/server/typingsCache.ts index eb1d3283e08..81dd483e65c 100644 --- a/src/server/typingsCache.ts +++ b/src/server/typingsCache.ts @@ -17,6 +17,7 @@ namespace ts.server { readonly typingOptions: TypingOptions; readonly compilerOptions: CompilerOptions; readonly typings: TypingsArray; + readonly files: string[]; poisoned: boolean; } @@ -73,6 +74,10 @@ namespace ts.server { return opt1.allowJs != opt2.allowJs; } + function filesChanged(before: string[], after: string[]): boolean { + return !setIsEqualTo(before, after); + } + export interface TypingsArray extends ReadonlyArray { " __typingsArrayBrand": any; } @@ -97,7 +102,7 @@ namespace ts.server { const entry = this.perProjectCache[project.getProjectName()]; const result: TypingsArray = entry ? entry.typings : emptyArray; - if (!entry || typingOptionsChanged(typingOptions, entry.typingOptions) || compilerOptionsChanged(project.getCompilerOptions(), entry.compilerOptions)) { + if (!entry || typingOptionsChanged(typingOptions, entry.typingOptions) || compilerOptionsChanged(project.getCompilerOptions(), entry.compilerOptions) || filesChanged(project.getFileNames(), entry.files)) { // something has been changed, issue a request to update typings this.installer.enqueueInstallTypingsRequest(project, typingOptions); // Note: entry is now poisoned since it does not really contain typings for a given combination of compiler options\typings options. @@ -106,6 +111,7 @@ namespace ts.server { compilerOptions: project.getCompilerOptions(), typingOptions, typings: result, + files: project.getFileNames(), poisoned: true }; } @@ -120,11 +126,12 @@ namespace ts.server { this.installer.enqueueInstallTypingsRequest(project, typingOptions); } - updateTypingsForProject(projectName: string, compilerOptions: CompilerOptions, typingOptions: TypingOptions, newTypings: string[]) { + updateTypingsForProject(projectName: string, compilerOptions: CompilerOptions, typingOptions: TypingOptions, newTypings: string[], files: string[]) { this.perProjectCache[projectName] = { compilerOptions, typingOptions, typings: toTypingsArray(newTypings), + files: files, poisoned: false }; } diff --git a/src/server/typingsInstaller/typingsInstaller.ts b/src/server/typingsInstaller/typingsInstaller.ts index f4a899068f7..701763b9560 100644 --- a/src/server/typingsInstaller/typingsInstaller.ts +++ b/src/server/typingsInstaller/typingsInstaller.ts @@ -287,6 +287,7 @@ namespace ts.server.typingsInstaller { typingOptions: request.typingOptions, compilerOptions: request.compilerOptions, typings, + files: request.fileNames, kind: "set" }; }