mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 20:52:56 +01:00
add setEagerModelSync-function to defaults, fixes #461
This commit is contained in:
parent
9b5c885b40
commit
9542c9f433
3 changed files with 36 additions and 8 deletions
|
|
@ -19,6 +19,7 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript.
|
||||||
private _onDidChange = new Emitter<monaco.languages.typescript.LanguageServiceDefaults>();
|
private _onDidChange = new Emitter<monaco.languages.typescript.LanguageServiceDefaults>();
|
||||||
private _extraLibs: { [path: string]: string };
|
private _extraLibs: { [path: string]: string };
|
||||||
private _workerMaxIdleTime: number;
|
private _workerMaxIdleTime: number;
|
||||||
|
private _eagerModelSync: boolean;
|
||||||
private _compilerOptions: monaco.languages.typescript.CompilerOptions;
|
private _compilerOptions: monaco.languages.typescript.CompilerOptions;
|
||||||
private _diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions;
|
private _diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions;
|
||||||
|
|
||||||
|
|
@ -89,6 +90,16 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript.
|
||||||
getWorkerMaxIdleTime() {
|
getWorkerMaxIdleTime() {
|
||||||
return this._workerMaxIdleTime;
|
return this._workerMaxIdleTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setEagerModelSync(value: boolean) {
|
||||||
|
// doesn't fire an event since no
|
||||||
|
// worker restart is required here
|
||||||
|
this._eagerModelSync = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
getEagerModelSync() {
|
||||||
|
return this._eagerModelSync;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- BEGIN enums copied from typescript to prevent loading the entire typescriptServices ---
|
// --- BEGIN enums copied from typescript to prevent loading the entire typescriptServices ---
|
||||||
|
|
|
||||||
6
src/monaco.d.ts
vendored
6
src/monaco.d.ts
vendored
|
|
@ -136,6 +136,12 @@ declare module monaco.languages.typescript {
|
||||||
* mean never shut down.
|
* mean never shut down.
|
||||||
*/
|
*/
|
||||||
setMaximunWorkerIdleTime(value: number): void;
|
setMaximunWorkerIdleTime(value: number): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure if all existing models should be eagerly sync'd
|
||||||
|
* to the worker on start or restart.
|
||||||
|
*/
|
||||||
|
setEagerModelSync(value: boolean): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export var typescriptDefaults: LanguageServiceDefaults;
|
export var typescriptDefaults: LanguageServiceDefaults;
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {LanguageServiceDefaultsImpl} from './monaco.contribution';
|
import { LanguageServiceDefaultsImpl } from './monaco.contribution';
|
||||||
import {TypeScriptWorker} from './worker';
|
import { TypeScriptWorker } from './worker';
|
||||||
|
|
||||||
import Promise = monaco.Promise;
|
import Promise = monaco.Promise;
|
||||||
import IDisposable = monaco.IDisposable;
|
import IDisposable = monaco.IDisposable;
|
||||||
|
|
@ -22,7 +22,7 @@ export class WorkerManager {
|
||||||
private _worker: monaco.editor.MonacoWebWorker<TypeScriptWorker>;
|
private _worker: monaco.editor.MonacoWebWorker<TypeScriptWorker>;
|
||||||
private _client: Promise<TypeScriptWorker>;
|
private _client: Promise<TypeScriptWorker>;
|
||||||
|
|
||||||
constructor(modeId:string, defaults: LanguageServiceDefaultsImpl) {
|
constructor(modeId: string, defaults: LanguageServiceDefaultsImpl) {
|
||||||
this._modeId = modeId;
|
this._modeId = modeId;
|
||||||
this._defaults = defaults;
|
this._defaults = defaults;
|
||||||
this._worker = null;
|
this._worker = null;
|
||||||
|
|
@ -74,14 +74,25 @@ export class WorkerManager {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this._client = this._worker.getProxy();
|
let p = this._worker.getProxy();
|
||||||
|
|
||||||
|
if (this._defaults.getEagerModelSync()) {
|
||||||
|
p = p.then(worker => {
|
||||||
|
return this._worker.withSyncedResources(monaco.editor.getModels()
|
||||||
|
.filter(model => model.getModeId() === this._modeId)
|
||||||
|
.map(model => model.uri)
|
||||||
|
);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this._client = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._client;
|
return this._client;
|
||||||
}
|
}
|
||||||
|
|
||||||
getLanguageServiceWorker(...resources: Uri[]): Promise<TypeScriptWorker> {
|
getLanguageServiceWorker(...resources: Uri[]): Promise<TypeScriptWorker> {
|
||||||
let _client:TypeScriptWorker;
|
let _client: TypeScriptWorker;
|
||||||
return toShallowCancelPromise(
|
return toShallowCancelPromise(
|
||||||
this._getClient().then((client) => {
|
this._getClient().then((client) => {
|
||||||
_client = client
|
_client = client
|
||||||
|
|
@ -92,9 +103,9 @@ export class WorkerManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function toShallowCancelPromise<T>(p:Promise<T>): Promise<T> {
|
function toShallowCancelPromise<T>(p: Promise<T>): Promise<T> {
|
||||||
let completeCallback: (value:T)=>void;
|
let completeCallback: (value: T) => void;
|
||||||
let errorCallback: (err:any)=>void;
|
let errorCallback: (err: any) => void;
|
||||||
|
|
||||||
let r = new Promise<T>((c, e) => {
|
let r = new Promise<T>((c, e) => {
|
||||||
completeCallback = c;
|
completeCallback = c;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue