initial push

Former-commit-id: a03463b3f1
This commit is contained in:
2025-05-27 21:31:02 -05:00
parent c5d9ea36df
commit 15193cddce
5 changed files with 158 additions and 2 deletions

View File

@@ -1,3 +1,47 @@
# Newtan-LSP
# Newton LSP Server Bridge
Newtan LSP service
## 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`:
```javascript
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"
}
},
...
];
```

1
index.js.REMOVED.git-id Normal file
View File

@@ -0,0 +1 @@
22bea36d0b01ddf2f56d5f5d84da8c155ce7d177

48
languageServers.js Normal file
View File

@@ -0,0 +1,48 @@
exports.servers = [
{
endpointName: "python",
args: ["pylsp"],
nameEndsWith: ".python",
connectionType: "stdio",
relativePath: false
}, {
endpointName: "go",
args: [
'gopls', ['-mode=stdio', '-remote=auto']
],
nameEndsWith: ".golang",
connectionType: "stdio",
relativePath: false,
serverFileNameReplacePattern: {
from: /.golang$/,
to: ".go"
},
clientFileNameReplacePattern: {
from: /.go$/,
to: ".golang"
},
}, {
endpointName: "c",
args: [
'clangd', ['--log=error']
],
nameEndsWith: ".c",
connectionType: "stdio"
}, {
endpointName: "r",
args: [
'r', ['--slave', '-e', 'languageserver::run()']
],
nameEndsWith: ".r",
connectionType: "stdio",
relativePath: false
}, {
endpointName: "typescript",
args: [
'typescript-language-server', ['--stdio']
],
nameEndsWith: ".ts",
connectionType: "stdio",
relativePath: false
},
];

17
package.json Normal file
View File

@@ -0,0 +1,17 @@
{
"name": "Newton LSP Server Bridge",
"version": "0.0.1",
"scripts": {
"start": "node index.js",
"start-verbose": "node index.js --verbose"
},
"dependencies": {
"typescript": "^5.7.2",
"yargs": "^17.7.2"
},
"devDependencies": {
"vscode-jsonrpc": "^8.1.0",
"vscode-uri": "^3.0.8",
"ws": "^8.13.0"
}
}

46
paths-utility.js Normal file
View File

@@ -0,0 +1,46 @@
const path = require("path");
const {URI} = require("vscode-uri");
function makeServerPath(fileName, replacement) {
if (fileName.startsWith("file:")) {
return fileName;
}
const serverPath = formatPath(__dirname + path.sep + "temp" + path.sep + fileName);
if (replacement) {
return serverPath.replace(
replacement.from,
replacement.to
);
}
return serverPath;
}
function makeClientPath(filePath, replacement) {
if (/^(file|https?):/.test(filePath)) {
return filePath;
}
const clientPath = filePath.split(/[/\\]/).pop();
if (replacement) {
return clientPath.replace(
replacement.from,
replacement.to
);
}
return clientPath;
}
function formatPath(filePath) {
return URI.file(filePath).toString();
}
exports.formatPath = formatPath;
exports.makeClientPath = makeClientPath;
exports.makeServerPath = makeServerPath;