Skip to content

reasonml/reason-tools

Repository files navigation

Reason Tools

Adds Reason to the browser.

Getting started

Directly in the browser: https://reasonml.github.io/reason-tools/popup.html

Or, browser extensions: Chrome | Firefox

demo of reason-tools

When you trigger the extension, it will copy the text you have highlighted and put it into an editor. The text is then translated into the corresponding Reason/OCaml text. Reason Tools will automatically convert between .re, .ml, .rei, and .mli text. In browsers that support it (currently just Chrome), a shortcut is added to open the extension with the highlighted text: Alt+D.

before and after of auto conversion

OCaml Documentation

Reason Tools tries to detect OCaml documentation pages and automatically convert between Reason and OCaml syntaxes. It provides an escape hatch for use if there is a false positive detection, or if you prefer the default OCamlDoc styles.

Github Integration

Reason Tools adds a shortcut from interface to implementation files (.re <=> .rei, .ml <=> .mli) on Github when it's detected. Triggered by Alt+I by default (> v0.0.19).

Contribute

To get started contributing you can clone and build the extension:

git clone https://github.com/rickyvetter/reason-tools.git
cd reason-tools
npm install # this will take a few minutes

npm run build to build the project. You also have the granular steps build:self and build:js for faster iteration.

To load in Chrome, go to chrome://extensions/ and turn on Developer Mode. From there you should be able to select "Load unpacked extension..." and choose reason-tools/_build/extension.

Build Systems

This project is a bit unconventional in nature (compiling a compiler and a parser/printer to web), so it uses a few build systems currently.

  • A custom shell.sh is used to compile Reason and the compiler to JavaScript.
  • Bsb is used to build its Reason logic. Nothing special.
  • Webpack is used to bundle the whole js output into a single pack.

Thanks

The foundation of the project is, without a doubt, refmt-web. This is an awesome project by @Schmavery which does the same refmt in a web page.

reason-web-toplevel, by @Engil was also an awesome project where a lot of the work in this project came from.

Also huge thanks to the js_of_ocaml team for building a compiler that pretty effortlessly builds Reason and refmt utils in JS.