When starting a language server (in my case python), which fails, there are a few exceptions that cannot be caught:
Error: Pending response rejected since connection got disposed
```javascript
at Object.dispose (...\dist\extension.js:8861:27)
at Object.dispose (...\dist\extension.js:5418:35)
at LanguageClient.handleConnectionClosed (...\dist\extension.js:5009:34)
at LanguageClient.handleConnectionClosed (...\dist\extension.js:3447:22)
at closeHandler (...\dist\extension.js:4996:18)
at CallbackList.invoke (...\dist\extension.js:6843:39)
at Emitter.fire (...\dist\extension.js:6905:36)
at closeHandler (...\dist\extension.js:8008:26)
at CallbackList.invoke (...\dist\extension.js:6843:39)
at Emitter.fire (...\dist\extension.js:6905:36)
at StreamMessageWriter.fireClose (...\dist\extension.js:7455:27)
at Socket. (...\dist\extension.js:7487:42)
at Socket.emit (node:events:513:28)
at Pipe. (node:net:757:14)
```
Error: Client is not running and can't be stopped. It's current state is: starting
```javascript
at LanguageClient.shutdown (...\dist\extension.js:4818:19)
at LanguageClient.stop (...\dist\extension.js:4789:21)
at LanguageClient.stop (...\dist\extension.js:3417:22)
at LanguageClient.doInitialize (...\dist\extension.js:4771:27)
at async LanguageClient.start (...\dist\extension.js:4626:13)
at async restartServer (...\dist\extension.js:440:9)
at async ...\dist\extension.js:50:20
```
The problem is that VSCode for all unhandled errors creates an "unhandledError" telemetry event. For correct analysis of telemetry data, you must manually create an event that indicates a specific problem. In this case, for example, "serverStartFailed".
Yes, I can set initializationFailedHandler in the LanguageClientOptions and create the necessary telemetry event in it. But VSCode will still create a duplicate "unhandledError" event, because the error is not caught.
Another bewilderment is that the server's stderr output can only be received in the outputChannel. Why not pass it as an argument to initializationFailedHandler? Or create a corresponding attribute in the LanguageClient class? To understand what happened to the user, I need to send all the information from the outputChannel to the telemetry server, including unnecessary information.
It also looks strange to automatically try to stop a server that is not running, which leads to another error. And it also automatically sent to telemetry...
When starting a language server (in my case python), which fails, there are a few exceptions that cannot be caught:
Error: Pending response rejected since connection got disposed
```javascript at Object.dispose (...\dist\extension.js:8861:27) at Object.dispose (...\dist\extension.js:5418:35) at LanguageClient.handleConnectionClosed (...\dist\extension.js:5009:34) at LanguageClient.handleConnectionClosed (...\dist\extension.js:3447:22) at closeHandler (...\dist\extension.js:4996:18) at CallbackList.invoke (...\dist\extension.js:6843:39) at Emitter.fire (...\dist\extension.js:6905:36) at closeHandler (...\dist\extension.js:8008:26) at CallbackList.invoke (...\dist\extension.js:6843:39) at Emitter.fire (...\dist\extension.js:6905:36) at StreamMessageWriter.fireClose (...\dist\extension.js:7455:27) at Socket.Error: Client is not running and can't be stopped. It's current state is: starting
```javascript at LanguageClient.shutdown (...\dist\extension.js:4818:19) at LanguageClient.stop (...\dist\extension.js:4789:21) at LanguageClient.stop (...\dist\extension.js:3417:22) at LanguageClient.doInitialize (...\dist\extension.js:4771:27) at async LanguageClient.start (...\dist\extension.js:4626:13) at async restartServer (...\dist\extension.js:440:9) at async ...\dist\extension.js:50:20 ```The problem is that VSCode for all unhandled errors creates an "unhandledError" telemetry event. For correct analysis of telemetry data, you must manually create an event that indicates a specific problem. In this case, for example, "serverStartFailed".
Yes, I can set
initializationFailedHandler
in theLanguageClientOptions
and create the necessary telemetry event in it. But VSCode will still create a duplicate "unhandledError" event, because the error is not caught.Another bewilderment is that the server's stderr output can only be received in the
outputChannel
. Why not pass it as an argument toinitializationFailedHandler
? Or create a corresponding attribute in theLanguageClient
class? To understand what happened to the user, I need to send all the information from theoutputChannel
to the telemetry server, including unnecessary information.It also looks strange to automatically try to stop a server that is not running, which leads to another error. And it also automatically sent to telemetry...
Thanks!