Closed as not planned
Description
I am trying to set up a minimal code editor with support for extensions, themes, and LSP. Despite being aware of #444, I’m still struggling to understand how to load a local VSCode extension from a vsix file and get it functioning.
I would greatly appreciate any help to get me started in the right direction :)
Here is a simplified example of what I've already come up with. I am trying to load the Swift extension and get LSP working. Especially with webpack.
import "vscode/localExtensionHost";
import { AfterViewInit, Component, ElementRef, ViewChild } from "@angular/core";
import getExtensionServiceOverride, { WorkerConfig } from "@codingame/monaco-vscode-extensions-service-override";
import getLanguagesServiceOverride from "@codingame/monaco-vscode-languages-service-override";
import getModelServiceOverride from "@codingame/monaco-vscode-model-service-override";
import getTextmateServiceOverride from "@codingame/monaco-vscode-textmate-service-override";
import getThemeServiceOverride from "@codingame/monaco-vscode-theme-service-override";
import { editor } from "monaco-editor";
import { extensions } from "vscode";
import { initialize as initializeMonacoService} from "vscode/services";
export type WorkerLoader = () => Worker;
export const workerConfig: WorkerConfig = {
url: new URL("vscode/workers/extensionHost.worker", import.meta.url).toString(),
options: { type: "module" }
};
const value = `func test() -> String {
print("Hello World")
return "Test"
}`;
const workerLoaders: Partial<Record<string, WorkerLoader>> = {
editorWorkerService: () => new Worker(new URL("monaco-editor/esm/vs/editor/editor.worker.js", import.meta.url), { type: "module" }),
textMateWorker: () => new Worker(new URL("@codingame/monaco-vscode-textmate-service-override/worker", import.meta.url), { type: "module" })
};
window.MonacoEnvironment = {
getWorker: function (moduleId, label): Worker {
const workerFactory = workerLoaders[label];
if (workerFactory != null) {
return workerFactory();
}
throw new Error(`Unimplemented worker ${label} (${moduleId})`);
}
};
await initializeMonacoService({
...getModelServiceOverride(),
...getExtensionServiceOverride(workerConfig),
...getThemeServiceOverride(),
...getLanguagesServiceOverride(),
...getTextmateServiceOverride()
});
// Not sure about this one. Doesn't work either
const extension = extensions.getExtension("sswg.swift-lang");
extension?.activate();
editor.create(this.editorRef?.nativeElement, {
value: value,
language: "swift"
});