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

Export getTypeScriptWorker & getJavaScriptWorker to monaco.languages.typescript #8

Merged
merged 1 commit into from
Aug 9, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/mode.ts
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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);
});
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why so complex and not just like return withMode(mode => mode.getJavaScriptWorker())?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

because we need to return a promise? withMode is a void.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right. missed that

Copy link

@prasikumbhare prasikumbhare Sep 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paveldk

i tried following, but result contains the same typescript .. doesn't return the compiled javascript..

 Monaco.languages.typescript.getTypeScriptWorker()
            .then(function(worker) {
                worker(model.uri)
                      .then(function(client) {
                            client.getEmitOutput(model.uri.toString()).then(function(r) {});
                      });
            });

Here is the result object returned:

Object {outputFiles: Array[1], emitSkipped: false}
  emitSkipped:false
  outputFiles:Array[1]
     0:Object
         name:"inmemory://model/2.js"
         text:"class foo {
            constructor() {
              console.log('foo');
            }
         }"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well @prasikumbhare probably you are targeting the latest JS version for compilation which is has some thing in common with TS so it looks like it was not compiled. I would recommend switching to previous version.

ref: https://github.com/Microsoft/monaco-typescript/blob/master/src/monaco.contribution.ts#L133

Copy link

@prasikumbhare prasikumbhare Sep 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paveldk

Thanks a ton.. following worked:

monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
    target: monaco.languages.typescript.ScriptTarget.ES5,
    allowNonTsExtensions: true
});

Cheers

}

// 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
Original file line number Diff line number Diff line change
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>;
}