hokein created this revision.
hokein added a reviewer: ilya-biryukov.
Herald added subscribers: kadircet, arphaman, jkorous, MaskRay, ioeric.
Herald added a project: clang.

This would make the life of tracking/reporting crashes easier, and
restarting clangd doesn't help as file state is usually broken.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D57884

Files:
  clangd/clients/clangd-vscode/src/extension.ts


Index: clangd/clients/clangd-vscode/src/extension.ts
===================================================================
--- clangd/clients/clangd-vscode/src/extension.ts
+++ clangd/clients/clangd-vscode/src/extension.ts
@@ -12,6 +12,25 @@
     return config.get<T>(option, defaultValue);
 }
 
+class NoRestartErrorHandler implements vscodelc.ErrorHandler {
+    // Mirror the implementation of DefaultErrorHandler which is not exposed in
+    // vscode-languageclient.
+       public error(_error: Error, _message: vscodelc.Message, count: number): 
vscodelc.ErrorAction {
+               if (count && count <= 3) {
+                       return vscodelc.ErrorAction.Continue;
+               }
+               return vscodelc.ErrorAction.Shutdown;
+       }
+       public closed(): vscodelc.CloseAction {
+        // The default implementation will restarts clangd up to 5 times if 
clangd
+        // crashes. We don't restart clangd -- this'd make the life of 
tracking/reporting
+        // crashes easier, and sometimes restart doesn't help as the file state
+        // is usually broken (files are not opened, etc).
+           vscode.window.showErrorMessage(`The clangd crashed, please reload 
the window to restart.`);
+        return vscodelc.CloseAction.DoNotRestart;
+       }
+}
+
 namespace SwitchSourceHeaderRequest {
 export const type =
     new vscodelc.RequestType<vscodelc.TextDocumentIdentifier, string|undefined,
@@ -88,6 +107,7 @@
             protocol2Code: (value: string) =>
                 vscode.Uri.file(realpathSync(vscode.Uri.parse(value).fsPath))
         },
+        errorHandler: new NoRestartErrorHandler(),
         // Do not switch to output window when clangd returns output
         revealOutputChannelOn: vscodelc.RevealOutputChannelOn.Never
     };


Index: clangd/clients/clangd-vscode/src/extension.ts
===================================================================
--- clangd/clients/clangd-vscode/src/extension.ts
+++ clangd/clients/clangd-vscode/src/extension.ts
@@ -12,6 +12,25 @@
     return config.get<T>(option, defaultValue);
 }
 
+class NoRestartErrorHandler implements vscodelc.ErrorHandler {
+    // Mirror the implementation of DefaultErrorHandler which is not exposed in
+    // vscode-languageclient.
+	public error(_error: Error, _message: vscodelc.Message, count: number): vscodelc.ErrorAction {
+		if (count && count <= 3) {
+			return vscodelc.ErrorAction.Continue;
+		}
+		return vscodelc.ErrorAction.Shutdown;
+	}
+	public closed(): vscodelc.CloseAction {
+        // The default implementation will restarts clangd up to 5 times if clangd
+        // crashes. We don't restart clangd -- this'd make the life of tracking/reporting
+        // crashes easier, and sometimes restart doesn't help as the file state
+        // is usually broken (files are not opened, etc).
+	    vscode.window.showErrorMessage(`The clangd crashed, please reload the window to restart.`);
+        return vscodelc.CloseAction.DoNotRestart;
+	}
+}
+
 namespace SwitchSourceHeaderRequest {
 export const type =
     new vscodelc.RequestType<vscodelc.TextDocumentIdentifier, string|undefined,
@@ -88,6 +107,7 @@
             protocol2Code: (value: string) =>
                 vscode.Uri.file(realpathSync(vscode.Uri.parse(value).fsPath))
         },
+        errorHandler: new NoRestartErrorHandler(),
         // Do not switch to output window when clangd returns output
         revealOutputChannelOn: vscodelc.RevealOutputChannelOn.Never
     };
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to