From 04476611615ae9ff22096eee8252206fcfc6c3f4 Mon Sep 17 00:00:00 2001 From: Joey Wunderlich Date: Wed, 11 Sep 2024 15:42:35 -0700 Subject: [PATCH] asyncify typecheckasync, fix workerOpAsync return value --- webapp/src/compiler.ts | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/webapp/src/compiler.ts b/webapp/src/compiler.ts index 21bf0beef33..7f4bdaf1ddd 100644 --- a/webapp/src/compiler.ts +++ b/webapp/src/compiler.ts @@ -462,7 +462,7 @@ function decompileSnippetsCoreAsync(opts: pxtc.CompileOptions): Promise(op: T, arg: pxtc.service.OpArg): Promise { +export function workerOpAsync(op: T, arg: pxtc.service.OpArg): Promise> { const startTm = Date.now() pxt.debug("worker op: " + op) return pxt.worker.getWorker(pxt.webConfig.workerjs) @@ -544,27 +544,31 @@ export function snippetAsync(qName: string, python?: boolean): Promise { return initStep.then(() => workerOpAsync("snippet", { snippet: { qName, python }, runtime: pxt.appTarget.runtime - })).then(res => res as string) + })); } export async function typecheckAsync(): Promise { const epkg = pkg.mainEditorPkg(); const isFirstTypeCheck = !firstTypecheck; - let p = epkg.buildAssetsAsync() - .then(() => pkg.mainPkg.getCompileOptionsAsync()) - .then(opts => { - opts.testMode = true // show errors in all top-level code - return workerOpAsync("setOptions", { options: opts }) - }) - .then(() => workerOpAsync("allDiags", {}) as Promise) - .then(r => { setDiagnostics("typecheck", r.diagnostics, r.sourceMap); return r; }) - .then(r => { + const p = (async () => { + try { + await epkg.buildAssetsAsync(); + const opts = await pkg.mainPkg.getCompileOptionsAsync(); + // show errors in all top-level code + opts.testMode = true; + await workerOpAsync("setOptions", { options: opts }); + const r = await workerOpAsync("allDiags", {}); + setDiagnostics("typecheck", r.diagnostics, r.sourceMap); if (isFirstTypeCheck) { refreshLanguageServiceApisInfo(); + await ensureApisInfoAsync(); } - return ensureApisInfoAsync().then(() => r); - }) - .catch(catchUserErrorAndSetDiags(null)) + return r; + } catch (e) { + catchUserErrorAndSetDiags(null); + return undefined; + } + })(); if (isFirstTypeCheck) firstTypecheck = p; return p; }