wylieconlon / jsonrpc-ws-proxy

Create a web socket interface for any number of language servers running in subprocesses
39 stars 18 forks source link

Error: spawn typescript-language-server ENOENT #10

Open LahlouY opened 2 years ago

LahlouY commented 2 years ago

i am using a proxy between the editor and the language server : jsonrpc-ws-proxy But i am getting an error when i try to start the proxy

Forwarding new client Launching Example Server failed: Error: spawn typescript-language-server ENOENT Client closed

in the web editor i get this

Couldn't start client Sample Language Client

client.js:2442 Uncaught (in promise) Error: Connection to server got closed. Server will not be restarted. at MonacoLanguageClient.handleConnectionClosed (client.js:2442) at CallbackList.invoke (events.js:55) at Emitter.fire (events.js:117) at closeHandler (connection.js:256) at CallbackList.invoke (events.js:55) at Emitter.fire (events.js:117) at WebSocketMessageReader.fireClose (messageReader.js:40) at WebSocketMessageReader.fireClose (reader.ts:81) at reader.ts:32 at WebSocket.webSocket.onclose (connection.ts:32)

import { MessageConnection } from 'vscode-jsonrpc';
import { listen } from '@codingame/monaco-jsonrpc';
import * as monaco from 'monaco-editor';
import {
  MonacoLanguageClient, CloseAction, ErrorAction,
  MonacoServices, createConnection
} from '@codingame/monaco-languageclient';
import normalizeUrl = require('normalize-url');
const ReconnectingWebSocket = require('reconnecting-websocket');

// register Monaco languages
monaco.languages.register({
  id: 'typescript',
  extensions: ['.ts'],
  aliases: ['TypeScript','ts','TS','Typescript','typescript']
})

// create Monaco editor
const value = `
let message:string = 'foo'
`;

monaco.editor.create(document.getElementById("container")!, {
  model: monaco.editor.createModel(value, 'typescript', monaco.Uri.parse('C:\\Users\\yylla\\Desktop\\Projet\\demo\\ts\\file.ts')),
  glyphMargin: true,
  theme: "vs-dark",
  lightbulb: {
    enabled: true
  }
});

// install Monaco language client services
MonacoServices.install(monaco);

// create the web socket
const url = createUrl('ws://localhost:3000/ts')
const webSocket = createWebSocket(url);
// listen when the web socket is opened
listen({
  webSocket,
  onConnection: connection => {
    // create and start the language client
    const languageClient = createLanguageClient(connection);
    const disposable = languageClient.start();
    connection.onClose(() => disposable.dispose());
  }
});

function createLanguageClient(connection: MessageConnection): MonacoLanguageClient {
  return new MonacoLanguageClient({
    name: "Sample Language Client",
    clientOptions: {
      // use a language id as a document selector
      documentSelector: ['typescript'],
      // disable the default error handler
      errorHandler: {
        error: () => ErrorAction.Continue,
        closed: () => CloseAction.DoNotRestart
      }
    },
    // create a language client connection from the JSON RPC connection on demand
    connectionProvider: {
      get: (errorHandler, closeHandler) => {
        return Promise.resolve(createConnection(connection, errorHandler, closeHandler))
      }
    }
  });
}

function createUrl(path: string): string {
  return normalizeUrl(path);
}

function createWebSocket(url: string): WebSocket {
  const socketOptions = {
    maxReconnectionDelay: 10000,
    minReconnectionDelay: 1000,
    reconnectionDelayGrowFactor: 1.3,
    connectionTimeout: 10000,
    maxRetries: Infinity,
    debug: false
  };
  return new ReconnectingWebSocket(url, [], socketOptions);
}

i am following this tutorial : https://medium.com/dscddu/language-server-protocol-adding-support-for-multiple-language-servers-to-monaco-editor-a3c35e42a98d

lowfront commented 2 years ago

Same error, same tutorial.

lowfront commented 2 years ago

When I tested it, WSL Ubuntu did not occurs an error. This error occurs in the window.