Newton LSP Server Bridge
Go to file
2025-05-27 22:35:50 -05:00
.gitignore Initial commit 2025-05-28 02:13:44 +00:00
index.js initial push 2025-05-27 22:35:50 -05:00
languageServers.js initial push 2025-05-27 22:35:50 -05:00
LICENSE Initial commit 2025-05-28 02:13:44 +00:00
package.json initial push 2025-05-27 22:35:50 -05:00
paths-utility.js initial push 2025-05-27 22:35:50 -05:00
README.md initial push 2025-05-27 22:35:50 -05:00

Newton LSP Server Bridge

Overview

This script provides a WebSocket bridge to interface with multiple Language Servers through clients via a single WebSocket connection. It supports various language servers concurrently and handles language-specific file extensions and initialization parameters.

Features

  • Utilizes vscode-jsonrpc for LSP message handling.
  • Supports multiple language servers concurrently.
  • Support for IPC and stdio communication with language servers.
  • Easy language server configuration and initialization parameter modification.
  • Error handling and logging for language server processes.
  • Automatic file URI translation between server and client paths.
  • Temporary file creation for textDocument/didOpen events.

Usage

  1. Install Node.js.
  2. Run 'npm install'.
  3. Configure the desired language servers in defaultServers.js.
  4. Run the script: npm run start || start-verbose.
  5. Connect to the WebSocket server on ws://localhost:9999/<language_endpoint>.
  6. Transmit LSP messages via the WebSocket connection.

Configuration

Add or modify language server configurations in languageServers.js:

exports.servers = [
   {
       endpointName: "language_endpoint",                  // WebSocket endpoint name
       args: ['executable_path', ['arg1', 'arg2', ...]],
       connectionType: "ipc" | "stdio",                    // Communication type
       relativePath: true | false,                         // Whether to use relative paths
       serverFileNameReplacePattern: {                     // Server file name regex replacements
           from: /pattern/,
           to: "replacement"
       },
       clientFileNameReplacePattern: {                     // Client file name regex replacements
           from: /pattern/,
           to: "replacement"
       }
   },
   ...
];