Forráskód Böngészése

Merge pull request #7 from nesterone/on-demand-schema-loading

Provide diagnostic option to enable on-demand schema loading
Martin Aeschlimann 6 éve
szülő
commit
39e2f4e709
5 módosított fájl, 21 hozzáadás és 6 törlés
  1. 10 1
      src/jsonWorker.ts
  2. 3 2
      src/monaco.contribution.ts
  3. 5 1
      src/monaco.d.ts
  4. 2 1
      src/workerManager.ts
  5. 1 1
      test/index.html

+ 10 - 1
src/jsonWorker.ts

@@ -11,6 +11,11 @@ import IWorkerContext = monaco.worker.IWorkerContext;
 import * as jsonService from 'vscode-json-languageservice';
 import * as ls from 'vscode-languageserver-types';
 
+let defaultSchemaRequestService;
+if (typeof fetch !== 'undefined'){
+	defaultSchemaRequestService = function (url) { return fetch(url).then(response => response.text())};
+}
+
 class PromiseAdapter<T> implements jsonService.Thenable<T> {
 	private wrapped: monaco.Promise<T>;
 
@@ -49,7 +54,10 @@ export class JSONWorker {
 		this._ctx = ctx;
 		this._languageSettings = createData.languageSettings;
 		this._languageId = createData.languageId;
-		this._languageService = jsonService.getLanguageService({ promiseConstructor: PromiseAdapter });
+		this._languageService = jsonService.getLanguageService({
+			schemaRequestService: createData.enableSchemaRequest && defaultSchemaRequestService,
+			promiseConstructor: PromiseAdapter
+		});
 		this._languageService.configure(this._languageSettings);
 	}
 
@@ -119,6 +127,7 @@ export class JSONWorker {
 export interface ICreateData {
 	languageId: string;
 	languageSettings: jsonService.LanguageSettings;
+    enableSchemaRequest: boolean;
 }
 
 export function create(ctx: IWorkerContext, createData: ICreateData): JSONWorker {

+ 3 - 2
src/monaco.contribution.ts

@@ -44,8 +44,9 @@ export class LanguageServiceDefaultsImpl implements monaco.languages.json.Langua
 const diagnosticDefault: monaco.languages.json.DiagnosticsOptions = {
 	validate: true,
 	allowComments: true,
-	schemas: []
-}
+	schemas: [],
+    enableSchemaRequest: false
+};
 
 const jsonDefaults = new LanguageServiceDefaultsImpl('json', diagnosticDefault);
 

+ 5 - 1
src/monaco.d.ts

@@ -30,6 +30,10 @@ declare module monaco.languages.json {
              */
             readonly schema?: any;
         }[];
+        /**
+         *  If set, the schema service would load schema content on-demand with 'fetch' if available
+         */
+        readonly enableSchemaRequest? : boolean
     }
 
     export interface LanguageServiceDefaults {
@@ -39,4 +43,4 @@ declare module monaco.languages.json {
     }
 
     export var jsonDefaults: LanguageServiceDefaults;
-}
+}

+ 2 - 1
src/workerManager.ts

@@ -69,7 +69,8 @@ export class WorkerManager {
 				// passed in to the create() method
 				createData: {
 					languageSettings: this._defaults.diagnosticsOptions,
-					languageId: this._defaults.languageId
+					languageId: this._defaults.languageId,
+					enableSchemaRequest: this._defaults.diagnosticsOptions.enableSchemaRequest
 				}
 			});
 

+ 1 - 1
test/index.html

@@ -115,4 +115,4 @@
 </script>
 
 </body>
-</html>
+</html>