From 867476531dc756e9e978efcc8b28ab92e561314b Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 26 Aug 2016 11:02:50 +0200 Subject: [PATCH] Expose setMaximunWorkerIdleTime --- src/languageFeatures.ts | 7 ++++--- src/monaco.contribution.ts | 18 +++++++++++++++--- src/monaco.d.ts | 27 +++++++++++++++++++++++++++ src/workerManager.ts | 11 +++++------ 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index fb8c3b89..8adae161 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -95,11 +95,12 @@ export class DiagnostcsAdapter extends Adapter { private _doValidate(resource: Uri): void { this._worker(resource).then(worker => { - let promises: Promise[] = []; - if (!this._defaults.diagnosticsOptions.noSyntaxValidation) { + const promises: Promise[] = []; + const {noSyntaxValidation, noSemanticValidation} = this._defaults.getDiagnosticsOptions(); + if (!noSyntaxValidation) { promises.push(worker.getSyntacticDiagnostics(resource.toString())); } - if (!this._defaults.diagnosticsOptions.noSemanticValidation) { + if (!noSemanticValidation) { promises.push(worker.getSemanticDiagnostics(resource.toString())); } return Promise.join(promises); diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 7850f3de..6ebe9c64 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -18,11 +18,13 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. private _onDidChange = new Emitter(); private _extraLibs: { [path: string]: string }; + private _workerMaxIdleTime: number; private _compilerOptions: monaco.languages.typescript.CompilerOptions; private _diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions; constructor(compilerOptions: monaco.languages.typescript.CompilerOptions, diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions) { this._extraLibs = Object.create(null); + this._workerMaxIdleTime = 2 * 60 * 1000; this.setCompilerOptions(compilerOptions); this.setDiagnosticsOptions(diagnosticsOptions); } @@ -31,7 +33,7 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. return this._onDidChange.event; } - get extraLibs(): { [path: string]: string; } { + getExtraLibs(): { [path: string]: string; } { const result = Object.create(null); for (var key in this._extraLibs) { result[key] = this._extraLibs[key]; @@ -60,7 +62,7 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. }; } - get compilerOptions(): monaco.languages.typescript.CompilerOptions { + getCompilerOptions(): monaco.languages.typescript.CompilerOptions { return this._compilerOptions; } @@ -69,7 +71,7 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. this._onDidChange.fire(this); } - get diagnosticsOptions(): monaco.languages.typescript.DiagnosticsOptions { + getDiagnosticsOptions(): monaco.languages.typescript.DiagnosticsOptions { return this._diagnosticsOptions; } @@ -77,6 +79,16 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript. this._diagnosticsOptions = options || Object.create(null); this._onDidChange.fire(this); } + + setMaximunWorkerIdleTime(value: number): void { + // doesn't fire an event since no + // worker restart is required here + this._workerMaxIdleTime = value; + } + + getWorkerMaxIdleTime() { + return this._workerMaxIdleTime; + } } // --- BEGIN enums copied from typescript to prevent loading the entire typescriptServices --- diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 2039f9d6..1ad1a1d7 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -95,9 +95,36 @@ declare module monaco.languages.typescript { } export interface LanguageServiceDefaults { + /** + * Add an additional source file to the language service. Use this + * for typescript (definition) files that won't be loaded as editor + * document, like `jquery.d.ts`. + * + * @param content The file content + * @param filePath An optional file path + * @returns A disposabled which will remove the file from the + * language service upon disposal. + */ addExtraLib(content: string, filePath?: string): IDisposable; + + /** + * Set TypeScript compiler options. + */ setCompilerOptions(options: CompilerOptions): void; + + /** + * Configure whether syntactic and/or semantic validation should + * be performed + */ setDiagnosticsOptions(options: DiagnosticsOptions): void; + + /** + * Configure when the worker shuts down. By default that is 2mins. + * + * @param value The maximun idle time in milliseconds. Values less than one + * mean never shut down. + */ + setMaximunWorkerIdleTime(value: number): void; } export var typescriptDefaults: LanguageServiceDefaults; diff --git a/src/workerManager.ts b/src/workerManager.ts index f71a3a0c..cd17a3f6 100644 --- a/src/workerManager.ts +++ b/src/workerManager.ts @@ -11,8 +11,6 @@ import Promise = monaco.Promise; import IDisposable = monaco.IDisposable; import Uri = monaco.Uri; -const STOP_WHEN_IDLE_FOR = 2 * 60 * 1000; // 2min - export class WorkerManager { private _defaults: LanguageServiceDefaultsImpl; @@ -49,8 +47,9 @@ export class WorkerManager { if (!this._worker) { return; } - let timePassedSinceLastUsed = Date.now() - this._lastUsedTime; - if (timePassedSinceLastUsed > STOP_WHEN_IDLE_FOR) { + const maxIdleTime = this._defaults.getWorkerMaxIdleTime(); + const timePassedSinceLastUsed = Date.now() - this._lastUsedTime; + if (maxIdleTime > 0 && timePassedSinceLastUsed > maxIdleTime) { this._stopWorker(); } } @@ -66,8 +65,8 @@ export class WorkerManager { // passed in to the create() method createData: { - compilerOptions: this._defaults.compilerOptions, - extraLibs: this._defaults.extraLibs + compilerOptions: this._defaults.getCompilerOptions(), + extraLibs: this._defaults.getExtraLibs() } });