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;
   }