'reason-vscode' plugin errors on incompatible versions ocaml/preprocessor


#1

In a ReasonML/BuckleScript project with bs-platform@7.0.1 (same with v6.2.1) in VSCode, ‘reason-vscode’ (v1.7.4) gives me the following error:

>> Fatal error: OCaml and preprocessor have incompatible versions
Fatal error: exception Whole_compiler.Misc.Fatal_error

The hover functionality does not work (i.e. showing the type). Syntax highlighting works though.

I have the following OCaml:

$ ocaml --version
The OCaml toplevel, version 4.06.1

I have the following switch (I also tried 4.02.3+buckle-master, without luck):

$ opam switch
#  switch                compiler                             description
   4.02.3+buckle-master  ocaml-variants.4.02.3+buckle-master  4.02.3+buckle-master
→  4.06.1                ocaml-base-compiler.4.06.1           4.06.1

And .merlin in my project is as follows:

####{BSB GENERATED: NO EDIT
B lib/bs
FLG -open Day13
FLG -ppx /Users/me/day13/node_modules/decco/ppx
FLG -ppx /Users/me/day13/node_modules/bs-platform/lib/bsppx.exe
S /Users/me/day13/node_modules/bs-platform/lib/ocaml
B /Users/me/day13/node_modules/bs-platform/lib/ocaml
FLG -nostdlib
FLG -w -30-40+6+7+27+32..39+44+45+101
S /Users/me/day13/node_modules/decco/lib/ocaml
B /Users/me/day13/node_modules/decco/lib/ocaml
S src
B lib/bs/src
####BSB GENERATED: NO EDIT}

The project compiles without errors, and the produced JavaScript is valid and runs fine.

Have any other run into the same problem? Or sees any obvious incompatible versions in my setup?

The OCaml and Reason IDE from Morrison works, so I could use that.


#2

Did you install bs-platform?

npm install -g bs-platform

You shouldn’t need to even install opam to get this working. Just bs-platform, VSCode, and the reason-vscode plugin.


#3

I had a similar incompatibility error when a library I was using needed a different version of Bucklescript. Downgrading to an earlier version worked for me.


#4

Thanks for your suggestions!

@rashkov Yes, I have bs-platform installed:

$ bsc -v
BuckleScript 5.2.1 ( Using OCaml:4.02.3+BS )

I tried to upgrade this to latest (BuckleScript 7.0.1 ( Using OCaml:4.06.1+BS )), but the issue with reason-vscode still persists.

But I think you’re onto something, @kevanstannard. I’m using decco, the new version that is only compatible with bs-platform >= v6. When I downgraded my project dependencies to @ryb73/decco@0.1 and bs-plaftorm@^5 the reason-vscode plugin started to work again :slight_smile: So it seems that it is something with the new version of decco and the reason-vscode plugin that is incompatible.


#5

I have BS 7, vscode plugin and decco working perfectly together but I know that sometimes if you have bs-platform installed globally and another local install, it can lead to some issues. Especially when the versions are different I guess. Try uninstalling the global version and just use the local one.


#6

I tried to uninstall bs-platform, unfortunately that did not have any effect, the error (... incompatible versions) is still there. I also tried initializing a new project without decco with only bs-platform@^7 and reason-vscode@1.7.4, and it also has the same issue. Since it works for you, @tsnobip, I must have a broken setup somehow. In case others stumbles upon this, I’m using macOS Mojave (10.14.6) and VSCode 1.41.1.


#7

I have the exact same setup, weird!


#8

I finally figured out what was the problem. I had an old version of refmt that I had specified in the reason-vscode setting Reason_language_server: Refmt:
reason-vscode%20setting

The fix was to remove this setting, and install the newest version of reason-cli:

npm uninstall -g reason-cli
npm install -g reason-cli@latest-macos

Now the error is gone and automatic formatting works :slight_smile:


#9

@mikael rason-cli is deprecated, if you absolutely need to have the latest version of refmt I guess you should install Reason from esy or opam but since you’re apparently targeting BuckleScript, none of this should be necessary, just remove the setting about refmt location and RLS will find refmt in the path (more precisely bsrefmt which is just an alias).


#10

Aha, I didn’t know. I do not need the latest version of refmt, so I guess I don’t need reason-cli. The downside is that I seem to loose rtop as well when uninstalling reason-cli. Automatic formatting also stopped working (I do not have anything specified in the custom refmt binary field), but after installing Prettier it started working again.

Anyway, I have now a working solution for BuckleScript projects in VSCode. Thanks for your help and clarifications, @tsnobip !