From e68574dd41cbc1c7430afd7411b862dde9a9830b Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn <gabbe.nord@gmail.com> Date: Wed, 15 Jun 2022 08:17:54 +0200 Subject: [PATCH 1/3] upgrade TS --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index dd85dc945..a109f8650 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "devDependencies": { "@types/node": "^14.14.41", "@types/vscode": "1.55.0", - "typescript": "^4.2.4" + "typescript": "^4.7.3" }, "engines": { "vscode": "^1.55.0" @@ -31,9 +31,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -58,9 +58,9 @@ "dev": true }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", "dev": true } } diff --git a/package.json b/package.json index 7ed204e86..2611b10d9 100644 --- a/package.json +++ b/package.json @@ -165,6 +165,6 @@ "devDependencies": { "@types/node": "^14.14.41", "@types/vscode": "1.55.0", - "typescript": "^4.2.4" + "typescript": "^4.7.3" } } From d1a56dd9892e757d01e3c6e9ee6592efba6ff5f9 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn <gabbe.nord@gmail.com> Date: Wed, 15 Jun 2022 08:31:03 +0200 Subject: [PATCH 2/3] upgrade lsp and vscode related packages to latest versions --- client/package-lock.json | 70 ++++++++++++++++----------------- client/package.json | 2 +- client/src/extension.ts | 31 ++++++++------- package-lock.json | 16 ++++---- package.json | 4 +- server/package-lock.json | 83 ++++++++++++++++------------------------ server/package.json | 6 +-- server/src/server.ts | 83 ++++++++++++++++++++-------------------- 8 files changed, 141 insertions(+), 154 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index c42fac774..d51356d07 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "vscode-languageclient": "^7.0.0" + "vscode-languageclient": "^8.0.1" } }, "node_modules/balanced-match": { @@ -68,39 +68,39 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", + "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", "dependencies": { "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.1" }, "engines": { - "vscode": "^1.52.0" + "vscode": "^1.67.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" } }, "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" }, "node_modules/yallist": { "version": "4.0.0", @@ -153,33 +153,33 @@ } }, "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==" }, "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz", + "integrity": "sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==", "requires": { "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.1" } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" } }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" }, "yallist": { "version": "4.0.0", diff --git a/client/package.json b/client/package.json index cb7f5d1f8..d4fd1cc9a 100644 --- a/client/package.json +++ b/client/package.json @@ -7,6 +7,6 @@ "author": "chenglou", "license": "MIT", "dependencies": { - "vscode-languageclient": "^7.0.0" + "vscode-languageclient": "^8.0.1" } } diff --git a/client/src/extension.ts b/client/src/extension.ts index 89e0c75ee..16673562a 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -12,6 +12,7 @@ import { LanguageClient, LanguageClientOptions, ServerOptions, + State, TransportKind, } from "vscode-languageclient/node"; @@ -113,18 +114,20 @@ export function activate(context: ExtensionContext) { // compilation has finished, and the most reliable source for that is the LS // server, that already keeps track of when the compiler finishes in order to // other provide fresh diagnostics. - client.onReady().then(() => { - context.subscriptions.push( - client.onNotification("rescript/compilationFinished", () => { - if (inCodeAnalysisState.active === true) { - customCommands.codeAnalysisWithReanalyze( - inCodeAnalysisState.activatedFromDirectory, - diagnosticsCollection, - diagnosticsResultCodeActions - ); - } - }) - ); + client.onDidChangeState(({ newState }) => { + if (newState === State.Running) { + context.subscriptions.push( + client.onNotification("rescript/compilationFinished", () => { + if (inCodeAnalysisState.active === true) { + customCommands.codeAnalysisWithReanalyze( + inCodeAnalysisState.activatedFromDirectory, + diagnosticsCollection, + diagnosticsResultCodeActions + ); + } + }) + ); + } }); return client; @@ -223,12 +226,12 @@ export function activate(context: ExtensionContext) { commands.registerCommand("rescript-vscode.restart_language_server", () => { client.stop().then(() => { client = createLanguageClient(); - context.subscriptions.push(client.start()); + client.start(); }); }); // Start the client. This will also launch the server - context.subscriptions.push(client.start()); + client.start(); // Autostart code analysis if wanted if ( diff --git a/package-lock.json b/package-lock.json index a109f8650..2d705ef14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,11 @@ "license": "MIT", "devDependencies": { "@types/node": "^14.14.41", - "@types/vscode": "1.55.0", + "@types/vscode": "1.68.0", "typescript": "^4.7.3" }, "engines": { - "vscode": "^1.55.0" + "vscode": "^1.68.0" } }, "node_modules/@types/node": { @@ -25,9 +25,9 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.55.0.tgz", - "integrity": "sha512-49hysH7jneTQoSC8TWbAi7nKK9Lc5osQNjmDHVosrcU8o3jecD9GrK0Qyul8q4aGPSXRfNGqIp9CBdb13akETg==", + "version": "1.68.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", + "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", "dev": true }, "node_modules/typescript": { @@ -52,9 +52,9 @@ "dev": true }, "@types/vscode": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.55.0.tgz", - "integrity": "sha512-49hysH7jneTQoSC8TWbAi7nKK9Lc5osQNjmDHVosrcU8o3jecD9GrK0Qyul8q4aGPSXRfNGqIp9CBdb13akETg==", + "version": "1.68.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.68.0.tgz", + "integrity": "sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw==", "dev": true }, "typescript": { diff --git a/package.json b/package.json index 2611b10d9..950827877 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "language-server" ], "engines": { - "vscode": "^1.55.0" + "vscode": "^1.68.0" }, "activationEvents": [ "onLanguage:rescript" @@ -164,7 +164,7 @@ }, "devDependencies": { "@types/node": "^14.14.41", - "@types/vscode": "1.55.0", + "@types/vscode": "1.68.0", "typescript": "^4.7.3" } } diff --git a/server/package-lock.json b/server/package-lock.json index 68d935771..1fdff3761 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -10,9 +10,9 @@ "license": "MIT", "dependencies": { "chokidar": "^3.5.1", - "vscode-jsonrpc": "^5.0.1", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-protocol": "^3.16.0" + "vscode-jsonrpc": "^8.0.1", + "vscode-languageserver": "^8.0.1", + "vscode-languageserver-protocol": "^3.17.1" }, "engines": { "node": "*" @@ -184,45 +184,37 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==", "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node": ">=14.0.0" } }, "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz", + "integrity": "sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==", "dependencies": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.1" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" } }, "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" } }, "dependencies": { @@ -338,38 +330,31 @@ } }, "vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz", + "integrity": "sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==" }, "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz", + "integrity": "sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==", "requires": { - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.1" } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz", + "integrity": "sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==", "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - }, - "dependencies": { - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - } + "vscode-jsonrpc": "8.0.1", + "vscode-languageserver-types": "3.17.1" } }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz", + "integrity": "sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==" } } } diff --git a/server/package.json b/server/package.json index fffb2f044..427a6bc28 100644 --- a/server/package.json +++ b/server/package.json @@ -13,9 +13,9 @@ }, "dependencies": { "chokidar": "^3.5.1", - "vscode-jsonrpc": "^5.0.1", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-protocol": "^3.16.0" + "vscode-jsonrpc": "^8.0.1", + "vscode-languageserver": "^8.0.1", + "vscode-languageserver-protocol": "^3.17.1" }, "scripts": {} } diff --git a/server/src/server.ts b/server/src/server.ts index a4c6a9958..eb6b36afd 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -1,8 +1,7 @@ import process from "process"; import * as p from "vscode-languageserver-protocol"; -import * as m from "vscode-jsonrpc/lib/messages"; import * as v from "vscode-languageserver"; -import * as rpc from "vscode-jsonrpc"; +import * as rpc from "vscode-jsonrpc/node"; import * as path from "path"; import fs from "fs"; // TODO: check DidChangeWatchedFilesNotification. @@ -51,7 +50,7 @@ let projectsFiles: Map< let codeActionsFromDiagnostics: codeActions.filesCodeActions = {}; // will be properly defined later depending on the mode (stdio/node-rpc) -let send: (msg: m.Message) => void = (_) => {}; +let send: (msg: p.Message) => void = (_) => {}; interface CreateInterfaceRequestParams { uri: string; @@ -93,7 +92,7 @@ let sendUpdatedDiagnostics = () => { uri: file, diagnostics: filesAndErrors[file], }; - let notification: m.NotificationMessage = { + let notification: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "textDocument/publishDiagnostics", params: params, @@ -111,7 +110,7 @@ let sendUpdatedDiagnostics = () => { uri: file, diagnostics: [], }; - let notification: m.NotificationMessage = { + let notification: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "textDocument/publishDiagnostics", params: params, @@ -131,7 +130,7 @@ let deleteProjectDiagnostics = (projectRootPath: string) => { uri: file, diagnostics: [], }; - let notification: m.NotificationMessage = { + let notification: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "textDocument/publishDiagnostics", params: params, @@ -143,7 +142,7 @@ let deleteProjectDiagnostics = (projectRootPath: string) => { } }; let sendCompilationFinishedMessage = () => { - let notification: m.NotificationMessage = { + let notification: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "rescript/compilationFinished", }; @@ -211,7 +210,7 @@ let openedFile = (fileUri: string, fileContent: string) => { message: `Start a build for this project to get the freshest data?`, actions: [payload], }; - let request: m.RequestMessage = { + let request: p.RequestMessage = { jsonrpc: c.jsonrpcVersion, id: serverSentRequestIdCounter++, method: "window/showMessageRequest", @@ -274,11 +273,11 @@ if (process.argv.includes("--stdio")) { let writer = new rpc.StreamMessageWriter(process.stdout); let reader = new rpc.StreamMessageReader(process.stdin); // proper `this` scope for writer - send = (msg: m.Message) => writer.write(msg); + send = (msg: p.Message) => writer.write(msg); reader.listen(onMessage); } else { // proper `this` scope for process - send = (msg: m.Message) => process.send!(msg); + send = (msg: p.Message) => process.send!(msg); process.on("message", onMessage); } @@ -340,7 +339,7 @@ function references(msg: p.RequestMessage) { filePath, params.position ); - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result, @@ -349,7 +348,7 @@ function references(msg: p.RequestMessage) { return response; } -function prepareRename(msg: p.RequestMessage): m.ResponseMessage { +function prepareRename(msg: p.RequestMessage): p.ResponseMessage { // https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_prepareRename let params = msg.params as p.PrepareRenameParams; let filePath = fileURLToPath(params.textDocument.uri); @@ -400,7 +399,7 @@ function rename(msg: p.RequestMessage) { if (documentChanges !== null) { result = { documentChanges }; } - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result, @@ -531,7 +530,7 @@ function codeAction(msg: p.RequestMessage): p.ResponseMessage { return res; } -function format(msg: p.RequestMessage): Array<m.Message> { +function format(msg: p.RequestMessage): Array<p.Message> { // technically, a formatting failure should reply with the error. Sadly // the LSP alert box for these error replies sucks (e.g. doesn't actually // display the message). In order to signal the client to display a proper @@ -539,7 +538,7 @@ function format(msg: p.RequestMessage): Array<m.Message> { // back a fake success message (because each request mandates a // response), then right away send a server notification to display a // nicer alert. Ugh. - let fakeSuccessResponse: m.ResponseMessage = { + let fakeSuccessResponse: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: [], @@ -552,7 +551,7 @@ function format(msg: p.RequestMessage): Array<m.Message> { type: p.MessageType.Error, message: `Not a ${c.resExt} or ${c.resiExt} file. Cannot format it.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params: params, @@ -573,7 +572,7 @@ function format(msg: p.RequestMessage): Array<m.Message> { newText: formattedResult.result, }, ]; - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: result, @@ -589,7 +588,7 @@ function format(msg: p.RequestMessage): Array<m.Message> { } } -function createInterface(msg: p.RequestMessage): m.Message { +function createInterface(msg: p.RequestMessage): p.Message { let params = msg.params as CreateInterfaceRequestParams; let extension = path.extname(params.uri); let filePath = fileURLToPath(params.uri); @@ -601,7 +600,7 @@ function createInterface(msg: p.RequestMessage): m.Message { message: `Cannot locate project directory to generate the interface file.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params: params, @@ -616,7 +615,7 @@ function createInterface(msg: p.RequestMessage): m.Message { message: `Not a ${c.resExt} file. Cannot create an interface for it.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params: params, @@ -636,7 +635,7 @@ function createInterface(msg: p.RequestMessage): m.Message { message: `Error reading bsconfig file.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params, @@ -662,7 +661,7 @@ function createInterface(msg: p.RequestMessage): m.Message { message: `No compiled interface file found. Please compile your project first.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params, @@ -681,18 +680,18 @@ function createInterface(msg: p.RequestMessage): m.Message { try { let resiPath = utils.replaceFileExtension(filePath, c.resiExt); fs.writeFileSync(resiPath, result, { encoding: "utf-8" }); - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: "Interface successfully created.", }; return response; } catch (e) { - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, error: { - code: m.ErrorCodes.InternalError, + code: p.ErrorCodes.InternalError, message: "Unable to create interface file.", }, }; @@ -700,7 +699,7 @@ function createInterface(msg: p.RequestMessage): m.Message { } } -function openCompiledFile(msg: p.RequestMessage): m.Message { +function openCompiledFile(msg: p.RequestMessage): p.Message { let params = msg.params as OpenCompiledFileParams; let filePath = fileURLToPath(params.uri); let projDir = utils.findProjectRootOfFile(filePath); @@ -711,7 +710,7 @@ function openCompiledFile(msg: p.RequestMessage): m.Message { message: `Cannot locate project directory.`, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params: params, @@ -736,7 +735,7 @@ function openCompiledFile(msg: p.RequestMessage): m.Message { message, }; - let response: m.NotificationMessage = { + let response: p.NotificationMessage = { jsonrpc: c.jsonrpcVersion, method: "window/showMessage", params, @@ -749,7 +748,7 @@ function openCompiledFile(msg: p.RequestMessage): m.Message { uri: compiledFilePath.result, }; - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result, @@ -758,8 +757,8 @@ function openCompiledFile(msg: p.RequestMessage): m.Message { return response; } -function onMessage(msg: m.Message) { - if (m.isNotificationMessage(msg)) { +function onMessage(msg: p.Message) { + if (p.Message.isNotification(msg)) { // notification message, aka the client ends it and doesn't want a reply if (!initialized && msg.method !== "exit") { // From spec: "Notifications should be dropped, except for the exit notification. This will allow the exit of a server without an initialize request" @@ -797,14 +796,14 @@ function onMessage(msg: m.Message) { // Can't seem to get this notification to trigger, but if it does this will be here and ensure we're synced up at the server. askForAllCurrentConfiguration(); } - } else if (m.isRequestMessage(msg)) { + } else if (p.Message.isRequest(msg)) { // request message, aka client sent request and waits for our mandatory reply if (!initialized && msg.method !== "initialize") { - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, error: { - code: m.ErrorCodes.ServerNotInitialized, + code: p.ErrorCodes.ServerNotInitialized, message: "Server not initialized.", }, }; @@ -847,7 +846,7 @@ function onMessage(msg: m.Message) { }, }, }; - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: result, @@ -871,7 +870,7 @@ function onMessage(msg: m.Message) { send(response); } else if (msg.method === "initialized") { // sent from client after initialize. Nothing to do for now - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: null, @@ -880,11 +879,11 @@ function onMessage(msg: m.Message) { } else if (msg.method === "shutdown") { // https://microsoft.github.io/language-server-protocol/specification#shutdown if (shutdownRequestAlreadyReceived) { - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, error: { - code: m.ErrorCodes.InvalidRequest, + code: p.ErrorCodes.InvalidRequest, message: `Language server already received the shutdown request`, }, }; @@ -899,7 +898,7 @@ function onMessage(msg: m.Message) { clearInterval(pullConfigurationPeriodically); } - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, result: null, @@ -934,17 +933,17 @@ function onMessage(msg: m.Message) { } else if (msg.method === openCompiledFileRequest.method) { send(openCompiledFile(msg)); } else { - let response: m.ResponseMessage = { + let response: p.ResponseMessage = { jsonrpc: c.jsonrpcVersion, id: msg.id, error: { - code: m.ErrorCodes.InvalidRequest, + code: p.ErrorCodes.InvalidRequest, message: "Unrecognized editor request.", }, }; send(response); } - } else if (m.isResponseMessage(msg)) { + } else if (p.Message.isResponse(msg)) { if (msg.id === c.configurationRequestId) { if (msg.result != null) { // This is a response from a request to get updated configuration. Note From ffca9bbc3424b757fe5f8fda10e09d03ab710468 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn <gabbe.nord@gmail.com> Date: Thu, 16 Jun 2022 08:07:11 +0200 Subject: [PATCH 3/3] push client state change listener to subscriptions to ensure its cleaned up --- client/src/extension.ts | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/client/src/extension.ts b/client/src/extension.ts index 16673562a..4b57f6ddf 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -114,21 +114,23 @@ export function activate(context: ExtensionContext) { // compilation has finished, and the most reliable source for that is the LS // server, that already keeps track of when the compiler finishes in order to // other provide fresh diagnostics. - client.onDidChangeState(({ newState }) => { - if (newState === State.Running) { - context.subscriptions.push( - client.onNotification("rescript/compilationFinished", () => { - if (inCodeAnalysisState.active === true) { - customCommands.codeAnalysisWithReanalyze( - inCodeAnalysisState.activatedFromDirectory, - diagnosticsCollection, - diagnosticsResultCodeActions - ); - } - }) - ); - } - }); + context.subscriptions.push( + client.onDidChangeState(({ newState }) => { + if (newState === State.Running) { + context.subscriptions.push( + client.onNotification("rescript/compilationFinished", () => { + if (inCodeAnalysisState.active === true) { + customCommands.codeAnalysisWithReanalyze( + inCodeAnalysisState.activatedFromDirectory, + diagnosticsCollection, + diagnosticsResultCodeActions + ); + } + }) + ); + } + }) + ); return client; }