Hook up language service to editor

This commit is contained in:
Christopher Schleiden
2022-12-08 10:28:45 -08:00
parent e348fb9a89
commit 53f034df8e
9 changed files with 5353 additions and 179 deletions
+59 -55
View File
@@ -1,66 +1,70 @@
import * as monaco from "monaco-editor";
import { buildWorkerDefinition } from "monaco-editor-workers";
import { MonacoServices } from "monaco-languageclient";
import getMessageServiceOverride from "vscode/service-override/messages";
import { StandaloneServices } from "vscode/services";
StandaloneServices.initialize({
...getMessageServiceOverride(document.body),
});
buildWorkerDefinition("dist", new URL("", window.location.href).href, false);
// register Monaco languages
monaco.languages.register({
id: "plaintext",
extensions: [".txt"],
aliases: ["PLAINTEXT", "plaintext"],
mimetypes: ["text/plain"],
});
// or import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
// if shipping only a subset of the features & languages is desired
import {
CloseAction,
ErrorAction,
MessageTransports,
MonacoLanguageClient,
MonacoServices,
} from "monaco-languageclient";
import {
BrowserMessageReader,
BrowserMessageWriter,
} from "vscode-languageserver-protocol/browser.js";
monaco.editor.create(document.getElementById("container")!, {
value: 'console.log("Hello, world")',
value: `name: Demo workflow
on:
push:
workflow_dispatch:
inputs:
name:
type: string
jobs:
say-hello:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: echo "Hello \${{ github.event.inputs.name }}"`,
language: "yaml",
});
// function createLanguageClient(
// transports: MessageTransports
// ): MonacoLanguageClient {
// return new MonacoLanguageClient({
// name: "Sample Language Client",
// clientOptions: {
// // use a language id as a document selector
// documentSelector: [{ language: "plaintext" }],
// // disable the default error handler
// errorHandler: {
// error: () => ({ action: ErrorAction.Continue }),
// closed: () => ({ action: CloseAction.DoNotRestart }),
// },
// },
// // create a language client connection to the server running in the web worker
// connectionProvider: {
// get: () => {
// return Promise.resolve(transports);
// },
// },
// });
// }
function createLanguageClient(
transports: MessageTransports
): MonacoLanguageClient {
return new MonacoLanguageClient({
name: "GitHub Actions Language Client",
clientOptions: {
// Handle all yaml files as workflows
documentSelector: [{ language: "yaml" }],
errorHandler: {
error: () => ({ action: ErrorAction.Continue }),
closed: () => ({ action: CloseAction.DoNotRestart }),
},
// Custom options for the GitHub Actions language server
initializationOptions: {},
},
connectionProvider: {
get: () => Promise.resolve(transports),
},
});
}
// install Monaco language client services
MonacoServices.install();
// const worker = new Worker(
// new URL("./src/serverWorker.ts", window.location.href).href,
// { type: "module" }
// );
// const reader = new BrowserMessageReader(worker);
// const writer = new BrowserMessageWriter(worker);
// const languageClient = createLanguageClient({ reader, writer });
// languageClient.start();
const worker = new Worker(
new URL("../service-worker/service-worker.ts", import.meta.url),
{
type: "module",
}
);
// reader.onClose(() => languageClient.stop());
const reader = new BrowserMessageReader(worker);
const writer = new BrowserMessageWriter(worker);
const languageClient = createLanguageClient({ reader, writer });
languageClient.start();
reader.onClose(() => languageClient.stop());