reasonml-editor / vscode-reasonml

OCaml & Reason support for Visual Studio Code
Apache License 2.0
491 stars 62 forks source link

Immediate crash when opening an OCaml file ("This socket is closed") #236

Open Gama11 opened 6 years ago

Gama11 commented 6 years ago

So far I've been unable to get any code completion features to work with this extension, as the language server always immediately crashes when opening an OCaml file. This is the output I get in the OCaml Language Server output channel:

events.js:163
      throw er; // Unhandled 'error' event
      ^

Error: This socket is closed
    at Socket._writeGeneric (net.js:692:19)
    at Socket._write (net.js:743:8)
    at doWrite (_stream_writable.js:329:12)
    at writeOrBuffer (_stream_writable.js:315:5)
    at Socket.Writable.write (_stream_writable.js:241:11)
    at Socket.write (net.js:670:40)
    at Interface._writeToOutput (readline.js:250:17)
    at Interface.prompt (readline.js:215:10)
    at Interface.question (readline.js:228:12)
    at worker (c:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\ocaml-language-server\bin\server\processes\merlin.js:52:31)
[Error - 17:12:29] Connection to server got closed. Server will not be restarted.
[Error - 17:12:29] Request textDocument/codeAction failed.
Error: Connection got disposed.
    at Object.dispose (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\main.js:825:25)
    at Object.dispose (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-languageclient\lib\client.js:57:35)
    at LanguageClient.handleConnectionClosed (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-languageclient\lib\client.js:1954:42)
    at LanguageClient.handleConnectionClosed (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-languageclient\lib\main.js:126:15)
    at closeHandler (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-languageclient\lib\client.js:1941:18)
    at CallbackList.invoke (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\events.js:71:39)
    at Emitter.fire (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\events.js:135:36)
    at closeHandler (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\main.js:221:26)
    at CallbackList.invoke (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\events.js:71:39)
    at Emitter.fire (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\events.js:135:36)
    at IPCMessageReader.AbstractMessageReader.fireClose (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\messageReader.js:135:27)
    at ChildProcess.<anonymous> (C:\Users\Jens\.vscode\extensions\freebroccolo.reasonml-1.0.37\node_modules\vscode-jsonrpc\lib\messageReader.js:253:61)
    at emitTwo (events.js:111:20)
    at ChildProcess.emit (events.js:194:7)
    at maybeClose (internal/child_process.js:899:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

This is with:

$ opam list
# Installed packages for 4.03.0+mingw64c:
[...]
merlin                        3.1.0

ocamlmerlin is in my PATH and I seem to be able to run it successfully both from cmd and an integrated terminal in VSCode (it exits without output and there's a ocamlmerlin-server.exe running afterwards.

I've tried this with two OCaml projects so far (haxe, hxparser), the behavior seems identical for both. I know that at least one person is using vscode-reasonml successfully with an almost identical setup as me, not sure what's wrong on my end to make it fail / what steps to take to debug this further...

Gama11 commented 6 years ago

Looks like the fix is actually rather simple - the following makes it work (thanks @nadako):

"reason.path.ocamlmerlin": "ocamlmerlin-server",

Not sure if this a change in more recent merlin versions or something? Definitely seems like something could be done on the extension side to make this work more smoothly though.

I'm still getting some undefined output in the OCaml Language Server output channel each time I hover over something, but that might be unrelated.