Reason and the Language Server Protocol: The Landscape17 Nov 2018
The state of editor tooling for programming languages has seen great change in recent memory thanks to Microsoft’s specification of a Language Server Protocol (LSP).
While some editors bundle LSP out of the box, making it a breeze to get up and running, others take a little more tweaking. In a series of posts, I will detail the state of LSP editor tooling in Reason / OCaml, as well as how to get set up quickly in a variety of editors.
Language Server Protocol Implementations
There are currently two alternative LSP server implementations for the OCaml ecosystem. Despite what their names might suggest, all of them support both OCaml and Reason. Their goals and tradeoffs are described below.
is the first implementation of an LSP server to have appeared for OCaml / Reason
and made a few compromises in the name of shipping quickly and iterating fast:
- It is implemented in TypeScript, and makes use of the upstream LSP implementation library by Microsoft for Node.js
- It makes extensive use of existing tools for functionality such as code
formatting, autocompletion and type information reporting.
- These include, but are not limited to:
a new implementation of the Language Server Protocol that is implemented in
Reason and compiled to native code. It makes another set of trade-offs, which
are detailed below, and is the implementation that will be covered in this
series of posts.
- It reduces the reliance on external tools such as Merlin –
reason-language-serverimplements its own type information reporting and source code diagnostics.
- Given it is written in Reason and compiled to native code,
reason-language-serverhas implemented its own LSP protocol communication infrastructure because there wasn’t one yet in the OCaml ecosystem.
- It also includes support for
bsb-native, a fork of BuckleScript that can build OCaml and Reason projects to OCaml bytecode and native assembly.
Setting up Reason in Visual Studio Code
The first editor that we are going to cover in this series is also the simplest one to set up. The following instructions assume that you have a working Visual Studio Code installation.
- Open VS Code and select the extensions panel.
- Click “Install”, wait until it finishes and click the “Reload” button to reload the workspace and apply your changes.
The above should be all you need! From now on, whenever you open a Reason or OCaml file you’ll see the Reason Language Server in action: beyond the syntax highlighting provided by the extension, you’ll see type hinting and error information if that is the case. Please open an issue in Reason Language Server in case anything has gone wrong.
Parting Thoughts and Next Posts
This post briefly covered the landscape of Language Server Protocol implementations in OCaml and Reason, as well as the tradeoffs each one embraces and the differences between them.
Next time we’ll be covering how to set up the Reason LSP integration for Emacs. Please tweet @_anmonteiro with any questions or feedback about this post.