Skip to content
This repository was archived by the owner on Nov 5, 2021. It is now read-only.

Commit 39e2f4e

Browse files
authored
Merge pull request #7 from nesterone/on-demand-schema-loading
Provide diagnostic option to enable on-demand schema loading
2 parents 4792444 + ce94995 commit 39e2f4e

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

src/jsonWorker.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import IWorkerContext = monaco.worker.IWorkerContext;
1111
import * as jsonService from 'vscode-json-languageservice';
1212
import * as ls from 'vscode-languageserver-types';
1313

14+
let defaultSchemaRequestService;
15+
if (typeof fetch !== 'undefined'){
16+
defaultSchemaRequestService = function (url) { return fetch(url).then(response => response.text())};
17+
}
18+
1419
class PromiseAdapter<T> implements jsonService.Thenable<T> {
1520
private wrapped: monaco.Promise<T>;
1621

@@ -49,7 +54,10 @@ export class JSONWorker {
4954
this._ctx = ctx;
5055
this._languageSettings = createData.languageSettings;
5156
this._languageId = createData.languageId;
52-
this._languageService = jsonService.getLanguageService({ promiseConstructor: PromiseAdapter });
57+
this._languageService = jsonService.getLanguageService({
58+
schemaRequestService: createData.enableSchemaRequest && defaultSchemaRequestService,
59+
promiseConstructor: PromiseAdapter
60+
});
5361
this._languageService.configure(this._languageSettings);
5462
}
5563

@@ -119,6 +127,7 @@ export class JSONWorker {
119127
export interface ICreateData {
120128
languageId: string;
121129
languageSettings: jsonService.LanguageSettings;
130+
enableSchemaRequest: boolean;
122131
}
123132

124133
export function create(ctx: IWorkerContext, createData: ICreateData): JSONWorker {

src/monaco.contribution.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
4444
const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = {
4545
validate: true,
4646
allowComments: true,
47-
schemas: []
48-
}
47+
schemas: [],
48+
enableSchemaRequest: false
49+
};
4950

5051
const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault);
5152

src/monaco.d.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ declare module monaco.languages.json {
3030
*/
3131
readonly schema?: any;
3232
}[];
33+
/**
34+
* If set, the schema service would load schema content on-demand with 'fetch' if available
35+
*/
36+
readonly enableSchemaRequest? : boolean
3337
}
3438

3539
export interface LanguageServiceDefaults {
@@ -39,4 +43,4 @@ declare module monaco.languages.json {
3943
}
4044

4145
export var jsonDefaults: LanguageServiceDefaults;
42-
}
46+
}

src/workerManager.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ export class WorkerManager {
6969
// passed in to the create() method
7070
createData: {
7171
languageSettings: this._defaults.diagnosticsOptions,
72-
languageId: this._defaults.languageId
72+
languageId: this._defaults.languageId,
73+
enableSchemaRequest: this._defaults.diagnosticsOptions.enableSchemaRequest
7374
}
7475
});
7576

test/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,4 @@ <h2>Monaco Editor JSON test page</h2>
115115
</script>
116116

117117
</body>
118-
</html>
118+
</html>

0 commit comments

Comments
 (0)