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

Commit

Permalink
Expose getTypeScriptWorker & getJavaScriptWorker to monaco.languages.…
Browse files Browse the repository at this point in the history
…typescript
  • Loading branch information
paveldk committed Aug 9, 2016
1 parent 8d8b5d2 commit 1bf301f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
31 changes: 28 additions & 3 deletions src/mode.ts
Expand Up @@ -14,23 +14,46 @@ 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
);
}

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[] = [];

Expand All @@ -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 = {
Expand Down
21 changes: 20 additions & 1 deletion src/monaco.contribution.ts
Expand Up @@ -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 {
Expand All @@ -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();
Expand Down
3 changes: 3 additions & 0 deletions src/monaco.d.ts
Expand Up @@ -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>;
}

0 comments on commit 1bf301f

Please sign in to comment.