With the recent "rescript" split, this language server becomes less relevant. If you're working on .res
files, check out the rescript-vscode plugin. If you're using reason/ocaml compiled to native, ocaml-lsp has the best support for dune.
This project implements the Language Server Protocol for Reason.
It is written in Reason, and compiled w/ esy + dune. The goal is for it to work equally well on Windows, MacOS, and Linux.
Install through VS Code extensions. Search for reason-vscode
:
Visual Studio Code Marketplace: reason-vscode
Can also be installed with VS Code Quick Open: press Cmd/Ctrl + P
, paste the following command, and press enter.
ext install jaredly.reason-vscode
The vscode extension is configured via the normal vscode settings screen.
There is a package available in the AUR.
Use your favorite AUR helper or:
git clone https://aur.archlinux.org/reason-language-server.git
cd reason-language-server
makepkg -si
Oni has support for Reason baked in, and it only needs a little bit of configuration to integrate this langauge server.
your-platform.zip
file from the latest release, unzip it, and put the reason-language-server.exe
file somewhere.Ctrl/Cmd + ,
), and add the following to the export const configuration = {
block at the end:
"language.reason.languageServer.command": "/abs/path/to/your/reason-language-server.exe",
"language.reason.languageServer.arguments": [],
"language.reason.languageServer.configuration": {},
And you're done!
your-platform.zip
file from the latest release, unzip it, and put the reason-language-server.exe
file somewhere.Ctrl/Cmd + Shift + P
and type "Preferences: LSP Settings" to bring up the settings file, and put in:
{
"clients": {
"reason": {
"enabled": true,
"command": ["/absolute/path/to/reason-language-server"],
"scopes": [
"source.reason",
"source.ocaml"
],
"syntaxes": [
"Packages/Reason/Reason.tmLanguage",
"Packages/sublime-reason/Reason.tmLanguage",
"Packages/OCaml/OCaml.sublime-syntax"
],
"languageId": "reason"
}
}
}
If you're on a newer version of macOS and receive the error popup "reason-language-server cannot be opened because the developer cannot be verified", see here.
your-platform.zip
file from the latest release, unzip it, and put the reason-language-server.exe
file somewhere.(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection "/absolute/path/to/reason-language-server.exe")
:major-modes '(reason-mode)
:notification-handlers (ht ("client/registerCapability" 'ignore))
:priority 1
:server-id 'reason-ls))
Install https://atom.io/packages/ide-reason
your-platform.zip
file from the latest release, unzip it, and put the reason-language-server.exe
file somewhere..vimrc
file:
let g:LanguageClient_serverCommands = {
\ 'reason': ['/absolute/path/to/reason-language-server.exe']
\ }
LanguageClient-neovim supports configuring language servers via a configuration file. By default the configuration file is .vim/settings.json
in the root of your project. For example to set the format width the file will contain:
{
"reason_language_server": {
"format_width": 100
}
}
The language server supports the following settings (not all of them apply to all clients, for example some clients don't support codelenses at all).
format_width
- defaults to 80 (int)per_value_codelens
- show the type of each toplevel value in a lens (bool)dependencies_codelens
- list a files dependencies at the top (bool)opens_codelens
- show what values are used from an open
(bool)autoRebuild
— rebuild project on save (turned on by default) (bool)Useful if you're developing the language server itself.
location
- provide a custom binary location for the langauge server (string)refmt
- provide a custom location for refmt (string)lispRefmt
- provide a custom location for reason-lisp's refmt (string)reloadOnChange
- reload the server when the reason-language-server binary is updated (bool). assumes the location
setting.show_debug_errors
- pipe the server's stderr into the output pane (bool)NOTE: reason-language-server runs bsb or dune automatically for you, it is not necessary to have a separate process running bsb -w
. In fact, having a separate process running can sometimes get the editor into a weird state.
If your editor is in a weird state, the first recourse (if you're in VSCode) is to restart the reason-language-server, with cmd+shift+p "restart reason language server"
. That often clears things up.
If that doesn't work, try cleaning built artifacts, with bsb -clean-world
(or for dune, dune clean
). Then try to build, with bsb -make-world
(or dune build @install
) and see if that works.
If you encounter Unable to find project root dir
error, check that there are no extra .merlin
files
in other folders than the project root folder.
That project uses merlin under the hood, which is a very powerful and well-developed tool for IDE features in OCaml/Reason. I had a couple of reasons for starting a new one. The biggest is that I wanted something with minimal dependencies, so that windows support would be relatively easy, and so that I might be able to ship it with bucklescript at some future point. (it also makes targetting JS easier). I also wanted a server that was written entirely in Reason (not part typescript, part reason), and something that was written from the ground up with the Language Server Protocol in mind, instead of taking a different IDE-support-tool and mapping the LSP onto it.
esy
if you don't have it (npm install -g esy
)cd
to the cloned diresy
from the main project diresy symlink
to link the built artifact into the root folder at bin.exe
cd editor-extensions/vscode && npm i && cd ../..
esy cp-test
./RunTests.exe
NOTE it's important that you don't run the RunTests.exe
from within an esy shell (e.g. esy dune exec RunTests.exe
) -- the variables esy sets will mess things up.
cd editor-extensions/vscode && npm run build-syntaxes
[Extension development host]
npm install && npm run build
in the project directoryCtrl/Cmd + Shift + P
"Restart Reason Language Server"You can then develop on the language server! When you change something, the server will automatically reload.
actions: release
(it can have anything in the body), that increments the version in extensions/vscode/package.json
to the desired version. Github actions will see that commit, and build a new github release.vsce
to publish the releaseCopyright © 2018 Jared Forsyth and contributors.
Distributed under the MIT License (see LICENSE).