diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 8aaff65febc..96f516632c7 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -641,6 +641,14 @@ namespace Harness.LanguageService { startGroup(): void { } + + setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any { + return setTimeout(callback, ms, args); + } + + clearTimeout(timeoutId: any): void { + clearTimeout(timeoutId); + } } export class ServerLanguageServiceAdapter implements LanguageServiceAdapter { diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 77908779d9f..793e17d52e7 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -533,7 +533,7 @@ namespace ts.server { // number becomes 0 for a watcher, then we should close it. directoryWatchersRefCount: ts.Map = {}; hostConfiguration: HostConfiguration; - timerForDetectingProjectFileListChanges: Map = {}; + timerForDetectingProjectFileListChanges: Map = {}; constructor(public host: ServerHost, public psLogger: Logger, public eventHandler?: ProjectServiceEventHandler) { // ts.disableIncrementalParsing = true; @@ -593,9 +593,9 @@ namespace ts.server { startTimerForDetectingProjectFileListChanges(project: Project) { if (this.timerForDetectingProjectFileListChanges[project.projectFilename]) { - clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); + this.host.clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); } - this.timerForDetectingProjectFileListChanges[project.projectFilename] = setTimeout( + this.timerForDetectingProjectFileListChanges[project.projectFilename] = this.host.setTimeout( () => this.handleProjectFileListChanges(project), 250 ); diff --git a/src/server/server.ts b/src/server/server.ts index ec83f8cc716..767793024c2 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -266,16 +266,21 @@ namespace ts.server { } } + const sys = ts.sys; + // Override sys.write because fs.writeSync is not reliable on Node 4 - ts.sys.write = (s: string) => writeMessage(s); - ts.sys.watchFile = (fileName, callback) => { + sys.write = (s: string) => writeMessage(s); + sys.watchFile = (fileName, callback) => { const watchedFile = pollingWatchedFileSet.addFile(fileName, callback); return { close: () => pollingWatchedFileSet.removeFile(watchedFile) }; }; - const ioSession = new IOSession(ts.sys, logger); + sys.setTimeout = setTimeout; + sys.clearTimeout = clearTimeout; + + const ioSession = new IOSession(sys, logger); process.on("uncaughtException", function(err: Error) { ioSession.logError(err, "unknown"); }); diff --git a/src/server/session.ts b/src/server/session.ts index 8c6525a70e6..09b86da48cc 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -133,6 +133,8 @@ namespace ts.server { } export interface ServerHost extends ts.System { + setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; + clearTimeout(timeoutId: any): void; } export class Session { diff --git a/tests/cases/unittests/cachingInServerLSHost.ts b/tests/cases/unittests/cachingInServerLSHost.ts index 58bcd76e246..0d14113942c 100644 --- a/tests/cases/unittests/cachingInServerLSHost.ts +++ b/tests/cases/unittests/cachingInServerLSHost.ts @@ -60,6 +60,12 @@ module ts { return { close: () => { } } + }, + setTimeout: (callback, ms, ...args) => { + return setTimeout(callback, ms, args); + }, + clearTimeout: (timeoutId) => { + clearTimeout(timeoutId); } }; } diff --git a/tests/cases/unittests/session.ts b/tests/cases/unittests/session.ts index ee9742482cd..a90f7d2ec84 100644 --- a/tests/cases/unittests/session.ts +++ b/tests/cases/unittests/session.ts @@ -18,7 +18,9 @@ namespace ts.server { getExecutingFilePath(): string { return void 0; }, getCurrentDirectory(): string { return void 0; }, readDirectory(): string[] { return []; }, - exit(): void {} + exit(): void { }, + setTimeout(callback, ms, ...args) { return 0; }, + clearTimeout(timeoutId) { } }; const mockLogger: Logger = { close(): void {}, diff --git a/tests/cases/unittests/versionCache.ts b/tests/cases/unittests/versionCache.ts index c1d283ca8cd..4c2b21224c8 100644 --- a/tests/cases/unittests/versionCache.ts +++ b/tests/cases/unittests/versionCache.ts @@ -271,7 +271,7 @@ and grew 1cm per day`; }); it("Edit ScriptVersionCache ", () => { - let svc = server.ScriptVersionCache.fromString(ts.sys, testContent); + let svc = server.ScriptVersionCache.fromString(ts.sys, testContent); let checkText = testContent; for (let i = 0; i < iterationCount; i++) {