-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Minimal example with extension support #465
Comments
There is no web-compatible swift extension, so with the vsix loader, you may manage to get the declarative parts working (like syntax highlighting or snippets) but not the LSP part or anything requiring extension code to work. A server will be required to run the LSP server, and there are multiple ways to connect to it from the client:
|
Thank you very much for your response. I've now got the vscode-server up and running and installed the swift vsix extension via You also mentioned the I've started the server with the following argumens: *
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
Server bound to 0.0.0.0:8080 (IPv4)
Extension host agent listening on 8080
[22:47:21]
[22:47:21] Extension host agent started.
Now on my client, I don't see the extension. This is my updated code: 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})`);
}
};
const fileSystemProvider = new RegisteredFileSystemProvider(false);
fileSystemProvider.registerFile(new RegisteredMemoryFile(monaco.Uri.file("/main.swift"), value));
registerFileSystemOverlay(1, fileSystemProvider);
await initializeMonacoService({
...getRemoteAgentServiceOverride({
scanRemoteExtensions: true
}),
...getModelServiceOverride(),
...getExtensionServiceOverride(),
...getThemeServiceOverride(),
...getLanguagesServiceOverride(),
...getTextmateServiceOverride(),
...getViewsServiceOverride(),
...getFileServiceOverride(),
...getSearchServiceOverride()
}, undefined, {
remoteAuthority: "localhost:8080"
});
console.log("extensions", vscode.extensions.all);
attachPart(Parts.EDITOR_PART, this.editorRef.nativeElement!);
vscode.workspace.openTextDocument("/main.swift").then((doc) => {
vscode.window.showTextDocument(doc);
}); But still Am I missing something? |
I’m not certain if this is related to the issue, but I’m also encountering the following console errors:
If they're not related, I will address them later on. For now I would just like to get the extensions working. |
Update: I think I got the extension working, by using
But there is no syntax highlighting or code completion enabled in the editor. Is there something I need to enable? |
This api doesn't allow to see extension running on another extension host, so calling it from the localExtensionHost will not allow you to see the extension running in the server extension host You can try to use the extension gallery service override to extension statuses
Is there anything working then? If you provide a reproduction repo, I may be able to help |
Hum no idea 🤔
fixed in #467 |
Thank you very much for your assistance so far. I’m gradually gaining a deeper understanding of how everything works here.
Not really, but const extension = await registerRemoteExtension("~/.vscode-server/extensions/sswg.swift-lang-1.10.4");
So it seems like the extension is doing something.
I will take care of that today and get back to you with a response, thanks |
I’ve hacked together a brief demo which you can find here: https://github.com/julian-baumann/monaco-vscode-demo For detailed setup instructions, please refer to the README. All the essential code is located in a single file: ./src/app/app.component.ts It should more or less work out of the box. Let me know if you encounter any issues. |
Ok, so,your problems:
|
Thank you, I've tried importing the required overrides, but as you mentioned, it doesn't work in electron. Do you happen to know any workaround or solution on how to get it running in electron? In the meanwhile, I've also create a new vite+React project with a the same code as in the angular application which can be found here: https://github.com/julian-baumann/monaco-vscode-demo/tree/vite
So it seems like it is trying to start the LSP service. But no indication whether it started successfully or not... Any ideas? |
Update: I got LSP working! The only thing not working right now is loading the |
I'm not aware of any workaround, we need to allow using the electron services in the lib |
Seems like it's working if we disable |
@julian-baumann could you please push working changes to your repo? |
I've just pushed a working version on main. But I will probably not continue with this project, since it was only a small demo to test everything. But the current angular project on the main branch should work fine both in the browser and in electorn. Please make sure to update the |
I understand, thanks! I just faced with same issue to make everything work together |
I may not be able to assist you with any further problems, but if you encounter any issues specifically with my test project, please don’t hesitate to contact me. |
I'm trying to do something very similar here: https://github.com/brianjenkins94/monaco-vscode-api-esbuild but can't quite make sense of some of these console errors: |
@CGNonofr was hoping you could take a look maybe? ^ 🙏 |
esbuild doesn't handle well assets urls, that's why we add to use a custom plugin in the demo, maybe it's your issue? |
I'm handling that already: https://github.com/brianjenkins94/monaco-vscode-api-esbuild/blob/main/tsup.config.ts#L38 Here it is on GitHub Pages if you don't want to try it locally: https://brianjenkins94.github.io/monaco-vscode-api-esbuild/ |
No idea why it tries to load extensionHostWorker.js from https://brianjenkins94.github.io/monaco-vscode-api-esbuild/vscode/src/vs/workbench/api/worker/extensionHostWorker.js, there is very probably a configuration issue I didn't really understand your recursive update of the importMetaUrlPlugin |
This issue is stale because it has been open for 30 days with no activity. |
Ah, looks to be related to all that Is it possible to load the workers from a CDN or something? Maybe via Looks like that would only work for the Maybe I just need to change the |
Unfortunately, very stuck on:
Latest attempt here: https://brianjenkins94.github.io/monaco-vscode-api-esbuild/ |
Sorry, I'm really not familiar enough with esbuild It's maybe a good opportunity for you to get into the code, since it's a quite complex project to use anyway, better understand it as much as possible |
The piece I'm stuck on is why the service workers aren't working. Everything else seems okay. |
You can have a look at the devtools, which file it's trying to load in the worker, and add breakpoints in the code where the error occurs. That's what I would be doing if I had to investigate it |
Is there anywhere else I can ask to get more informational error messages or debug info? Breakpoints and stepping aren't yielding anything helpful, just generic errors. |
I don't think so But you are the one creating the worker, you can have a look at the worker url to see if there is anything wrong |
A new error message! How exciting!
Seems there may have been a name change and now it's called |
Yes, in the last version, have a look at https://github.com/CodinGame/monaco-vscode-api/releases/tag/v9.0.0 |
It looks like it's still called import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';
-const IEditorWorkerService = ( createDecorator('editorWorkerService'));
export { IEditorWorkerService }; |
Did you update VSCode and rebuild the library, because the node_modules/vscode of the demo just link to the root directory |
Yes, I even did |
I'm not sure how you manage to make |
Btw, you're mixing up the worker name with the service name. I didn't properly pay attention |
Actually, mine looks to be throwing all the same warnings that https://monaco-vscode-api.netlify.app/ is throwing. Mine just only knows about plain text? |
Oh, indeed, I've desactivated the console warnings for some reason and I didn't see it, it seems broken, will have a look |
Ok, the worker was renamed in the VSCode service, but not in the standalone service, and the lib still uses the standalone service I'll release a 9.0.1 with the fix, in the meantime you can keep |
Awesome, it's working! Last step is to load my const { registerFileUrl, getApi } = registerExtension({
"name": "helloworld-web-sample",
"displayName": "helloworld-web-sample",
"description": "HelloWorld example for VS Code in the browser",
"version": "0.0.1",
"publisher": "vscode-samples",
"private": true,
"license": "MIT",
"repository": "https://github.com/microsoft/vscode-extension-samples/helloworld-web-sample",
"engines": {
"vscode": "^1.84.0"
},
"categories": [
"Other"
],
"activationEvents": [
"onLanguage:plaintext"
],
"browser": "./extension.js",
...
}, ExtensionHostKind.LocalWebWorker);
registerFileUrl('/package.json', new URL('./extensions/hello-world/package.json', import.meta.url).toString())
|
You seems to be never registering the |
No, issue is not that, I am also having same issue loading COBOL LSP. I dont need vscode server and I dont need workspace, workbench, all kinds of stuff because main intent is the single file editor.
is successfully ran but
browser does not let me load that try with
edit: If I cant run LSP from browser, what is the most sane way to run this extension without setupping whole remote server? |
That's a bold assumption Your issue if cause by the worker extension host being strict on CSP, and your bundler transform assets into data: urls that are not allowed. You can try forcing it to emit asset to the disk, I'll have a lookif it's possible to allow it |
Mhm, deleted <meta http-equiv="Content-Security-Policy" content="
default-src 'none';
child-src 'self' data: blob:;
script-src 'self' 'unsafe-eval' 'sha256-fCnZ3iXydTZHO961jO3ioYDdWSfm8PZg/rI6zFX/SE0=' https: http://localhost:* blob:;
connect-src 'self' https: wss: http://localhost:* http://127.0.0.1:* ws://localhost:* ws://127.0.0.1:*;"/> from worker myself, and even then it is not working that well (extension is not loaded at all, commands are not there. pressing tab throws error "cobol-lsp.smart-tab" doesnt exist but there is one in package json). i guess i am going for workspace & vs server lol |
I've tried your extension in vscode.dev, and there are the same issues (at least the smart-tab command missing) so the extension is not so web-compatible after all |
This issue is stale because it has been open for 30 days with no activity. |
This issue was closed because it has been inactive for 14 days since being marked as stale. |
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.
The text was updated successfully, but these errors were encountered: