Skip to content

Monaco Editor test client #5

@vbar

Description

@vbar

For testing the container (especially Language Server performance), if would be useful to wrap the Monaco Editor Language Client in a non-interactive, command-line test client, which would just open a source file and handle the initial LSP communication, IOW wrap

    <Editor
      className="hooks-editor"
      keepCurrentModel
      defaultLanguage={snap.files?.[snap.active]?.language}
      language={snap.files?.[snap.active]?.language}
      path={`file:///work/c/${snap.files?.[snap.active]?.name}`}
      defaultValue={snap.files?.[snap.active]?.content}
      beforeMount={monaco => {
        if (!snap.editorCtx) {
          snap.files.forEach(file =>
            monaco.editor.createModel(
              file.content,
              file.language,
              monaco.Uri.parse(`file:///work/c/${file.name}`)
            )
          );
        }

        // create the web socket
        if (!subscriptionRef.current) {
          monaco.languages.register({
            id: "c",
            extensions: [".c", ".h"],
            aliases: ["C", "c", "H", "h"],
            mimetypes: ["text/plain"],
          });
          MonacoServices.install(monaco);
          const webSocket = createWebSocket(
            process.env.NEXT_PUBLIC_LANGUAGE_SERVER_API_ENDPOINT || ""
          );
          subscriptionRef.current = webSocket;
          // listen when the web socket is opened
          listen({
            webSocket: webSocket as WebSocket,
            onConnection: connection => {
              // create and start the language client
              const languageClient = createLanguageClient(connection);
              const disposable = languageClient.start();
              connection.onClose(() => {
                try {
                  // disposable.stop();
                  disposable.dispose();
                } catch (err) {
                  console.log("err", err);
                }
              });
            },
          });
        }

in a standalone script, possibly using Jest (see https://medium.com/hired-engineering/setting-up-monaco-with-jest-e1e4c963ac ).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions