[mod] wsl
This commit is contained in:
parent
b741dc5952
commit
ddd772f563
69 changed files with 26660 additions and 25940 deletions
|
|
@ -1,30 +1,30 @@
|
|||
import "ace-code/esm-resolver";
|
||||
import {jsonContent} from "../docs-example/json-example";
|
||||
|
||||
import {json5Content, json5Schema} from "../docs-example/json5-example";
|
||||
|
||||
import {addFormatCommand, createEditorWithLSP} from "../utils";
|
||||
import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client";
|
||||
|
||||
|
||||
let modes = [
|
||||
{name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}},
|
||||
{name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}},
|
||||
]
|
||||
|
||||
const serverData: LanguageClientConfig = {
|
||||
module: () => import("ace-linters/build/language-client"),
|
||||
modes: "json|json5",
|
||||
type: "socket",
|
||||
socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"),
|
||||
}
|
||||
|
||||
let languageProvider = AceLanguageClient.for(serverData);
|
||||
let i = 0;
|
||||
for (let mode of modes) {
|
||||
// @ts-expect-error
|
||||
createEditorWithLSP(mode, i, languageProvider);
|
||||
i++;
|
||||
}
|
||||
// @ts-expect-error
|
||||
addFormatCommand(languageProvider);
|
||||
import "ace-code/esm-resolver";
|
||||
import {jsonContent} from "../docs-example/json-example";
|
||||
|
||||
import {json5Content, json5Schema} from "../docs-example/json5-example";
|
||||
|
||||
import {addFormatCommand, createEditorWithLSP} from "../utils";
|
||||
import {AceLanguageClient, LanguageClientConfig} from "ace-linters/build/ace-language-client";
|
||||
|
||||
|
||||
let modes = [
|
||||
{name: "json", mode: "ace/mode/json", content: jsonContent, options: {jsonSchemaUri: "common-form.schema.json"}},
|
||||
{name: "json5", mode: "ace/mode/json5", content: json5Content, options: {jsonSchemaUri: json5Schema}},
|
||||
]
|
||||
|
||||
const serverData: LanguageClientConfig = {
|
||||
module: () => import("ace-linters/build/language-client"),
|
||||
modes: "json|json5",
|
||||
type: "socket",
|
||||
socket: new WebSocket("ws://127.0.0.1:3000/exampleServer"),
|
||||
}
|
||||
|
||||
let languageProvider = AceLanguageClient.for(serverData);
|
||||
let i = 0;
|
||||
for (let mode of modes) {
|
||||
// @ts-expect-error
|
||||
createEditorWithLSP(mode, i, languageProvider);
|
||||
i++;
|
||||
}
|
||||
// @ts-expect-error
|
||||
addFormatCommand(languageProvider);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
# Sample language server
|
||||
|
||||
This is just sample websocket server based on vscode-json-languageserver
|
||||
|
||||
## Getting Started
|
||||
To run the server, simply follow these steps:
|
||||
|
||||
1. Install dependencies by running `npm i`
|
||||
2. Start the server by running `npm run start-server`
|
||||
|
||||
And that's it! Your sample language server on 3000 port should now be up and running.
|
||||
# Sample language server
|
||||
|
||||
This is just sample websocket server based on vscode-json-languageserver
|
||||
|
||||
## Getting Started
|
||||
To run the server, simply follow these steps:
|
||||
|
||||
1. Install dependencies by running `npm i`
|
||||
2. Start the server by running `npm run start-server`
|
||||
|
||||
And that's it! Your sample language server on 3000 port should now be up and running.
|
||||
|
|
|
|||
1234
bundles/websockets-lsp/server/package-lock.json
generated
1234
bundles/websockets-lsp/server/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "sample-server",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start-server": "node --loader ts-node/esm server.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"vscode-json-languageserver": "^1.3.4",
|
||||
"ts-node": "^10.8.1"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
{
|
||||
"name": "sample-server",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start-server": "node --loader ts-node/esm server.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"vscode-json-languageserver": "^1.3.4",
|
||||
"ts-node": "^10.8.1"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,98 +1,98 @@
|
|||
import fs from "fs";
|
||||
import {WebSocketServer} from 'ws';
|
||||
import * as http from 'http';
|
||||
import {fileURLToPath, URL} from 'url';
|
||||
import * as net from 'net';
|
||||
import express from 'express';
|
||||
import * as rpc from 'vscode-ws-jsonrpc';
|
||||
// @ts-ignore
|
||||
import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js'
|
||||
import requestLight from "request-light";
|
||||
import vscodeUri from "vscode-uri";
|
||||
import {createConnection} from 'vscode-languageserver/lib/node/main.js';
|
||||
import path from 'path';
|
||||
|
||||
export function startLanguageServer(webSocket: rpc.IWebSocket) {
|
||||
const messageReader = new rpc.WebSocketMessageReader(webSocket);
|
||||
const messageWriter = new rpc.WebSocketMessageWriter(webSocket);
|
||||
const connection = createConnection(messageReader, messageWriter);
|
||||
jsonServer.startServer(connection, {
|
||||
file: getFileService(),
|
||||
http: getHTTPService(),
|
||||
configureHttpRequests: requestLight.configure
|
||||
});
|
||||
}
|
||||
|
||||
function getHTTPService() {
|
||||
return {
|
||||
getContent(uri: any) {
|
||||
const headers = {'Accept-Encoding': 'gzip, deflate'};
|
||||
return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => {
|
||||
return response.responseText;
|
||||
}, (error) => {
|
||||
return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString());
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function getFileService() {
|
||||
return {
|
||||
getContent(location: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const uri = vscodeUri.URI.parse(location);
|
||||
fs.readFile(uri.fsPath, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const serverFilePath = fileURLToPath(import.meta.url);
|
||||
const serverDir = path.dirname(serverFilePath);
|
||||
|
||||
process.on('uncaughtException', (err: any) => {
|
||||
console.error('Uncaught Exception: ', err.toString());
|
||||
if (err.stack) {
|
||||
console.error(err.stack);
|
||||
}
|
||||
});
|
||||
|
||||
const app = express();
|
||||
app.use(express.static(serverDir));
|
||||
const server = app.listen(3000);
|
||||
|
||||
const webSocketServer = new WebSocketServer({
|
||||
noServer: true,
|
||||
perMessageDeflate: false
|
||||
});
|
||||
server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
|
||||
const baseURL = `http://${request.headers.host}/`;
|
||||
const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined;
|
||||
if (pathname === '/exampleServer') {
|
||||
webSocketServer.handleUpgrade(request, socket, head, webSocket => {
|
||||
const socket: rpc.IWebSocket = {
|
||||
send: content => webSocket.send(content, error => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
}),
|
||||
onMessage: cb => webSocket.on('message', cb),
|
||||
onError: cb => webSocket.on('error', cb),
|
||||
onClose: cb => webSocket.on('close', cb),
|
||||
dispose: () => webSocket.close()
|
||||
};
|
||||
if (webSocket.readyState === webSocket.OPEN) {
|
||||
startLanguageServer(socket);
|
||||
} else {
|
||||
webSocket.on('open', () => startLanguageServer(socket));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
import fs from "fs";
|
||||
import {WebSocketServer} from 'ws';
|
||||
import * as http from 'http';
|
||||
import {fileURLToPath, URL} from 'url';
|
||||
import * as net from 'net';
|
||||
import express from 'express';
|
||||
import * as rpc from 'vscode-ws-jsonrpc';
|
||||
// @ts-ignore
|
||||
import * as jsonServer from 'vscode-json-languageserver/out/jsonServer.js'
|
||||
import requestLight from "request-light";
|
||||
import vscodeUri from "vscode-uri";
|
||||
import {createConnection} from 'vscode-languageserver/lib/node/main.js';
|
||||
import path from 'path';
|
||||
|
||||
export function startLanguageServer(webSocket: rpc.IWebSocket) {
|
||||
const messageReader = new rpc.WebSocketMessageReader(webSocket);
|
||||
const messageWriter = new rpc.WebSocketMessageWriter(webSocket);
|
||||
const connection = createConnection(messageReader, messageWriter);
|
||||
jsonServer.startServer(connection, {
|
||||
file: getFileService(),
|
||||
http: getHTTPService(),
|
||||
configureHttpRequests: requestLight.configure
|
||||
});
|
||||
}
|
||||
|
||||
function getHTTPService() {
|
||||
return {
|
||||
getContent(uri: any) {
|
||||
const headers = {'Accept-Encoding': 'gzip, deflate'};
|
||||
return requestLight.xhr({url: uri, followRedirects: 5, headers}).then(response => {
|
||||
return response.responseText;
|
||||
}, (error) => {
|
||||
return Promise.reject(error.responseText || requestLight.getErrorStatusDescription(error.status) || error.toString());
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function getFileService() {
|
||||
return {
|
||||
getContent(location: any) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const uri = vscodeUri.URI.parse(location);
|
||||
fs.readFile(uri.fsPath, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const serverFilePath = fileURLToPath(import.meta.url);
|
||||
const serverDir = path.dirname(serverFilePath);
|
||||
|
||||
process.on('uncaughtException', (err: any) => {
|
||||
console.error('Uncaught Exception: ', err.toString());
|
||||
if (err.stack) {
|
||||
console.error(err.stack);
|
||||
}
|
||||
});
|
||||
|
||||
const app = express();
|
||||
app.use(express.static(serverDir));
|
||||
const server = app.listen(3000);
|
||||
|
||||
const webSocketServer = new WebSocketServer({
|
||||
noServer: true,
|
||||
perMessageDeflate: false
|
||||
});
|
||||
server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
|
||||
const baseURL = `http://${request.headers.host}/`;
|
||||
const pathname = request.url ? new URL(request.url, baseURL).pathname : undefined;
|
||||
if (pathname === '/exampleServer') {
|
||||
webSocketServer.handleUpgrade(request, socket, head, webSocket => {
|
||||
const socket: rpc.IWebSocket = {
|
||||
send: content => webSocket.send(content, error => {
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
}),
|
||||
onMessage: cb => webSocket.on('message', cb),
|
||||
onError: cb => webSocket.on('error', cb),
|
||||
onClose: cb => webSocket.on('close', cb),
|
||||
dispose: () => webSocket.close()
|
||||
};
|
||||
if (webSocket.readyState === webSocket.OPEN) {
|
||||
startLanguageServer(socket);
|
||||
} else {
|
||||
webSocket.on('open', () => startLanguageServer(socket));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue