Skip to content
Snippets Groups Projects
Commit dfc3a77a authored by SeeBasTStick's avatar SeeBasTStick
Browse files

added socket based connection to langauge server in order to stop overshadowing from prob2 kernel

parent dde13a70
No related branches found
No related tags found
No related merge requests found
# b-language-extension README
Compiler support for B via ProB. You need a nightly build of ProB to fully use this extension. Visit https://www3.hhu.de/stups/prob/ to get the latest version.
Compiler support for B via ProB. You don´t need your own version of proB, This plugin comes with one packed. You can however provide a proB version by your own, but be cautious; This can lead to unexpected and untested behavior.
## Features
......@@ -10,8 +10,7 @@ Compiler support for B via ProB. You need a nightly build of ProB to fully use t
## Requirements
- Latest nightly build of ProB.
- Java v.8 or higher. By default java home is considerd to be accessible by 'java' in terminal/powershell
- Java v.8 or higher. By default java home is considerd to be accessible by typing 'java' in terminal/powershell
## Extension Settings
......@@ -24,7 +23,6 @@ This extension contributes the following settings:
* `languageServer.performanceHints`: to enable/disable performance-related Hints.
* `languageServer.debugMode`: to enable/disable the server log
To ensure expected behavior deactivate/activate settings in the User and Worksapce Tab.
## Bugs
- please open an issue at https://github.com/SeeBasTStick/b-language-extension
......@@ -34,12 +32,13 @@ The language server can be found here https://github.com/SeeBasTStick/b-language
## Future plans
- Linter Support (via Server, is still in development by Mircosoft https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/)
- Quickfix support aká Code Completion
- Completion and Feedback via ProB Java kernel instead of cli calls. (will improve performance and give access to more features)
- Definition provider
## Release Notes
### 1.1.2
### 2.0.0
- fixed a bug where for longer outputs from probcli the system would not return causing a deadlook
\ No newline at end of file
- know uses the java prob kernel for drastic performance gain
\ No newline at end of file
......@@ -494,8 +494,7 @@
"deep-is": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
},
"define-properties": {
"version": "1.1.3",
......@@ -986,6 +985,11 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ip-regex": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
"integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
},
"is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
......@@ -1058,6 +1062,21 @@
"has-symbols": "^1.0.1"
}
},
"is-url": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
},
"is2": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz",
"integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==",
"requires": {
"deep-is": "^0.1.3",
"ip-regex": "^2.1.0",
"is-url": "^1.2.2"
}
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
......@@ -1306,6 +1325,11 @@
"through2": "^2.0.3"
}
},
"net": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/net/-/net-1.0.2.tgz",
"integrity": "sha1-0XV+yaf7I3HYPPR1XOPifhCCk4g="
},
"node-environment-flags": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
......@@ -1703,6 +1727,25 @@
"string-width": "^3.0.0"
}
},
"tcp-port-used": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz",
"integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==",
"requires": {
"debug": "4.1.0",
"is2": "2.0.1"
},
"dependencies": {
"debug": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
"integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
"requires": {
"ms": "^2.1.1"
}
}
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
......
......@@ -43,7 +43,7 @@
"languageServer.wdChecks": {
"id": "2",
"title": "WD Checks",
"scope": "application",
"scope": "window",
"type": "boolean",
"default": true,
"description": "Option for WD Checks"
......@@ -162,9 +162,11 @@
"fs": "0.0.1-security",
"mkdirp": "^1.0.4",
"ndjson": "^1.5.0",
"net": "^1.0.2",
"path": "^0.12.7",
"run-script-os": "^1.1.1",
"stream-to-array": "^2.3.0",
"tcp-port-used": "^1.0.1",
"ts-xor": "^1.0.8",
"vscode-api": "0.0.0",
"vscode-languageclient": "^6.1.3",
......
......@@ -11,8 +11,12 @@ import {
LanguageClient,
LanguageClientOptions,
ServerOptions,
StreamInfo
} from 'vscode-languageclient';
import * as net from 'net';
import * as path from 'path'
import { spawn } from 'child_process';
let client: LanguageClient;
......@@ -20,18 +24,35 @@ let client: LanguageClient;
export function activate(context: ExtensionContext) {
const serverHome = context.asAbsolutePath(path.join('node_modules', 'b-language-server', 'build', 'libs', 'b-language-server-all.jar'))
//const serverHome = "/home/sebastian/IdeaProjects/b-language-server/build/libs/b-language-server-all.jar"
const javaHome : string = workspace.getConfiguration("common").get("javaHome")
let serverOptions: ServerOptions = {
command: javaHome,
args: [ "-jar", serverHome]
};
//Start the server
let prc = spawn(javaHome, ['-jar', serverHome])
prc.stdout.on('data', function(data){
let connectionInfo = {
port : 55556
}
let serverOptions : ServerOptions = () => {
let socket = net.connect(connectionInfo);
let result: StreamInfo = {
writer: socket,
reader: socket
};
return Promise.resolve(result);
}
let debugChannle = window.createOutputChannel("ProB language server")
debugChannle.appendLine("starting server at <" + javaHome + " -jar " + serverHome + ">")
debugChannle.appendLine("starting server " )
//debugChannle.appendLine("fs exits " + fs.existsSync(serverHome))
// Options to control the language client
let clientOptions: LanguageClientOptions = {
......@@ -70,7 +91,7 @@ export function activate(context: ExtensionContext) {
{
showDebugMessages(debugChannle)
})
})
}
......@@ -102,3 +123,4 @@ function toggleItem(editor: TextEditor, item) {
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment