Prechádzať zdrojové kódy

Expose getTypeScriptWorker & getJavaScriptWorker to monaco.languages.typescript

Pavel Kolev 9 rokov pred
rodič
commit
1bf301f43c
3 zmenil súbory, kde vykonal 51 pridanie a 4 odobranie
  1. 28 3
      src/mode.ts
  2. 20 1
      src/monaco.contribution.ts
  3. 3 0
      src/monaco.d.ts

+ 28 - 3
src/mode.ts

@@ -14,8 +14,11 @@ import Promise = monaco.Promise;
 import Uri = monaco.Uri;
 import IDisposable = monaco.IDisposable;
 
+let javaScriptWorker: (first: Uri, ...more: Uri[]) => Promise<TypeScriptWorker>;
+let typeScriptWorker: (first: Uri, ...more: Uri[]) => Promise<TypeScriptWorker>;
+
 export function setupTypeScript(defaults:LanguageServiceDefaultsImpl): void {
-	setupMode(
+	typeScriptWorker = setupMode(
 		defaults,
 		'typescript',
 		Language.TypeScript
@@ -23,14 +26,34 @@ export function setupTypeScript(defaults:LanguageServiceDefaultsImpl): void {
 }
 
 export function setupJavaScript(defaults:LanguageServiceDefaultsImpl): void {
-	setupMode(
+	javaScriptWorker = setupMode(
 		defaults,
 		'javascript',
 		Language.EcmaScript5
 	);
 }
 
-function setupMode(defaults:LanguageServiceDefaultsImpl, modeId:string, language:Language): void {
+export function getJavaScriptWorker(): Promise<TypeScriptWorker> {
+	return new monaco.Promise((resolve, reject) => {
+		if (!javaScriptWorker) {
+			return reject("JavaScript not registered!");
+		}
+
+		resolve(javaScriptWorker);
+	});
+}
+
+export function getTypeScriptWorker(): Promise<TypeScriptWorker> {
+	return new monaco.Promise((resolve, reject) => {
+		if (!typeScriptWorker) {
+			return reject("TypeScript not registered!");
+		}
+
+		resolve(typeScriptWorker);
+	});
+}
+
+function setupMode(defaults:LanguageServiceDefaultsImpl, modeId:string, language:Language): (first: Uri, ...more: Uri[]) => Promise<TypeScriptWorker> {
 
 	let disposables: IDisposable[] = [];
 
@@ -53,6 +76,8 @@ function setupMode(defaults:LanguageServiceDefaultsImpl, modeId:string, language
 	disposables.push(new languageFeatures.DiagnostcsAdapter(defaults, modeId, worker));
 	disposables.push(monaco.languages.setLanguageConfiguration(modeId, richEditConfiguration));
 	disposables.push(monaco.languages.setTokensProvider(modeId, createTokenizationSupport(language)));
+
+	return worker;
 }
 
 const richEditConfiguration:monaco.languages.LanguageConfiguration = {

+ 20 - 1
src/monaco.contribution.ts

@@ -121,6 +121,23 @@ const javascriptDefaults = new LanguageServiceDefaultsImpl(
 	{ allowNonTsExtensions: true, allowJs: true, target: ScriptTarget.Latest },
 	{ noSemanticValidation: true, noSyntaxValidation: false });
 
+function getTypeScriptWorker(): monaco.Promise<Worker> {
+	return new monaco.Promise((resolve, reject) => {
+ 		withMode((mode) => {
+ 			mode.getTypeScriptWorker()
+ 				.then(resolve, reject);
+ 		});
+ 	});
+}
+
+function getJavaScriptWorker(): monaco.Promise<Worker> {
+	return new monaco.Promise((resolve, reject) => {
+ 		withMode((mode) => {
+ 			mode.getJavaScriptWorker()
+ 				.then(resolve, reject);
+ 		});
+ 	});
+}
 
 // Export API
 function createAPI(): typeof monaco.languages.typescript {
@@ -131,7 +148,9 @@ function createAPI(): typeof monaco.languages.typescript {
 		ScriptTarget: ScriptTarget,
 		ModuleResolutionKind: ModuleResolutionKind,
 		typescriptDefaults: typescriptDefaults,
-		javascriptDefaults: javascriptDefaults
+		javascriptDefaults: javascriptDefaults,
+		getTypeScriptWorker: getTypeScriptWorker,
+		getJavaScriptWorker: getJavaScriptWorker
 	}
 }
 monaco.languages.typescript = createAPI();

+ 3 - 0
src/monaco.d.ts

@@ -106,4 +106,7 @@ declare module monaco.languages.typescript {
 
     export var typescriptDefaults: LanguageServiceDefaults;
     export var javascriptDefaults: LanguageServiceDefaults;
+
+    export var getTypeScriptWorker: () => monaco.Promise<Worker>;
+    export var getJavaScriptWorker: () => monaco.Promise<Worker>;
 }