Skip to content

Commit a1bc7c1

Browse files
jriekenscottlu
authored andcommitted
add setEagerModelSync-function to defaults, fixes #461
1 parent 264ce6d commit a1bc7c1

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

src/monaco.contribution.ts

+11
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript.
1919
private _onDidChange = new Emitter<monaco.languages.typescript.LanguageServiceDefaults>();
2020
private _extraLibs: { [path: string]: string };
2121
private _workerMaxIdleTime: number;
22+
private _eagerModelSync: boolean;
2223
private _compilerOptions: monaco.languages.typescript.CompilerOptions;
2324
private _diagnosticsOptions: monaco.languages.typescript.DiagnosticsOptions;
2425

@@ -89,6 +90,16 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.typescript.
8990
getWorkerMaxIdleTime() {
9091
return this._workerMaxIdleTime;
9192
}
93+
94+
setEagerModelSync(value: boolean) {
95+
// doesn't fire an event since no
96+
// worker restart is required here
97+
this._eagerModelSync = value;
98+
}
99+
100+
getEagerModelSync() {
101+
return this._eagerModelSync;
102+
}
92103
}
93104

94105
// --- BEGIN enums copied from typescript to prevent loading the entire typescriptServices ---

src/monaco.d.ts

+6
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ declare module monaco.languages.typescript {
136136
* mean never shut down.
137137
*/
138138
setMaximunWorkerIdleTime(value: number): void;
139+
140+
/**
141+
* Configure if all existing models should be eagerly sync'd
142+
* to the worker on start or restart.
143+
*/
144+
setEagerModelSync(value: boolean): void;
139145
}
140146

141147
export var typescriptDefaults: LanguageServiceDefaults;

src/workerManager.ts

+19-8
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55
'use strict';
66

7-
import {LanguageServiceDefaultsImpl} from './monaco.contribution';
8-
import {TypeScriptWorker} from './worker';
7+
import { LanguageServiceDefaultsImpl } from './monaco.contribution';
8+
import { TypeScriptWorker } from './worker';
99

1010
import Promise = monaco.Promise;
1111
import IDisposable = monaco.IDisposable;
@@ -22,7 +22,7 @@ export class WorkerManager {
2222
private _worker: monaco.editor.MonacoWebWorker<TypeScriptWorker>;
2323
private _client: Promise<TypeScriptWorker>;
2424

25-
constructor(modeId:string, defaults: LanguageServiceDefaultsImpl) {
25+
constructor(modeId: string, defaults: LanguageServiceDefaultsImpl) {
2626
this._modeId = modeId;
2727
this._defaults = defaults;
2828
this._worker = null;
@@ -74,14 +74,25 @@ export class WorkerManager {
7474
}
7575
});
7676

77-
this._client = this._worker.getProxy();
77+
let p = this._worker.getProxy();
78+
79+
if (this._defaults.getEagerModelSync()) {
80+
p = p.then(worker => {
81+
return this._worker.withSyncedResources(monaco.editor.getModels()
82+
.filter(model => model.getModeId() === this._modeId)
83+
.map(model => model.uri)
84+
);
85+
})
86+
}
87+
88+
this._client = p;
7889
}
7990

8091
return this._client;
8192
}
8293

8394
getLanguageServiceWorker(...resources: Uri[]): Promise<TypeScriptWorker> {
84-
let _client:TypeScriptWorker;
95+
let _client: TypeScriptWorker;
8596
return toShallowCancelPromise(
8697
this._getClient().then((client) => {
8798
_client = client
@@ -92,9 +103,9 @@ export class WorkerManager {
92103
}
93104
}
94105

95-
function toShallowCancelPromise<T>(p:Promise<T>): Promise<T> {
96-
let completeCallback: (value:T)=>void;
97-
let errorCallback: (err:any)=>void;
106+
function toShallowCancelPromise<T>(p: Promise<T>): Promise<T> {
107+
let completeCallback: (value: T) => void;
108+
let errorCallback: (err: any) => void;
98109

99110
let r = new Promise<T>((c, e) => {
100111
completeCallback = c;

0 commit comments

Comments
 (0)