diff --git a/README.md b/README.md index 1b50d7274723daa31c82b9cb9a3e87defcf86f78..1824e319e6054081067e4252fe53740a808aed98 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 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 diff --git a/package-lock.json b/package-lock.json index 144d28a7e0b779725d4333adb34c86b5a7da55ec..b3d9aae6ed48683f1fc88386f3140c14eaca10be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index d45de453d59491f52b8c9a134272fa63baee80c4..5723cf0e445d8fc2d3cf7e0445e12d0847524ef6 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/extension.ts b/src/extension.ts index 1bff34c9064e49f7d43102850efd9f9ed3b143e2..2fb1e534e8e0f636369401eaa712883ce1dbb825 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -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,8 +91,8 @@ export function activate(context: ExtensionContext) { { showDebugMessages(debugChannle) }) - - + }) + } function showDebugMessages(debugChannle : OutputChannel){ @@ -100,5 +121,6 @@ function toggleItem(editor: TextEditor, item) { } } +