I’ve re-installed opam from scratch, after doing a rm -rf ~/.opam, and then installed a switch based on 4.14.0.
The problem I’m encountering now is that VSCode “cannot find merlin binary” (even though which ocamlmerlin returns the correct answer /Users/jonathandoyle/.opam/four_fourteen/bin/ocamlmerlin in any terminal).
Indeed, and this package is “Reason+OCaml” as indicated in the error message. I disabled it and the error message is gone. Thanks for the help
OCaml Platform and ocaml-lsp-server are installed indeed.
My troubles are not finished, though : the “goto definition” feature does not work across files (although it does work inside a single file and type hints work as well).
Do you build your project with Dune ?
Merlin requires project’s specific configuration and build artifacts to function properly.
The easiest way to get these is to build your project with Dune.
So if you already have dune files in your project you probably just need to run dune build once.
Well then, I guess I need to learn about those and how to specify them to merlin without dune.
I already have a .merlin file in my project, what else do I need?
(update : or perhaps I can try to “dunify” a nondune project, if that’s simple to do).
Ok, the problem is that ocaml-lsp-server does not load .merlin files anymore by default.
I think there is a flag for that (--fallback-read-dot-merlin). But, looking at the settings panel of the vscode plugin, I don’t see where this flag can be added.
@rgrinberg@Ulugbek : what is the intended way to use that flag ? Also, it would be very useful if ocaml-lsp-servercould hint that user might want to use that fallback flag, and the vscode extension have an easy-to-toggle setting.
Also, I noticed that opam tells me that ocaml-lsp-server is installed with version 1.14.1, and that I have a ~/.opam/four_fourteen/lib/ocaml-lsp-server directory containing a few files (dune-package, META and opam), but I don’t have an ~/.opam/four_fourteen/bin/ocaml-lsp-server binary. Shouldn’t there be one ?
Some users still rely on .merlin for some setups not yet supported by dune. Melange in particular is still in this state (temporarily).
I’d rather not expose this flag at all to end users because I consider writing .merlin files by hand to be an anti-pattern. @jonathandoyle is better served by building his project with dune.
If you say so. So far I don’t consider my OCaml projects to be likely to be useful to other people, which is why I never bothered to build them with dune (and so far I don’t see what benefits dune brings to amateurs only programming for themselves like me).
Is it simple to “dunify” a large product originally created and maintained without dune ?
For large projects, writing .merlin files and verifying they work correctly is just as much work as porting them to dune.
This is an interesting use case. Though it seems like it would be just as easy for users to write a dune file to describe their project in parallel to their build system. It would be useful to both verify their makefiles work and get free editor support
I should clarify that I’m not against supporting .merlin files by default in principle. I just dislike how they are generated in the source directory. I’d be willing to support any build system that generates this stuff in a dedicated build directory.