ElixirScript Documentation

The goal is to convert a subset (or full set) of Elixir code to JavaScript, providing the ability to write JavaScript in Elixir. This is done by taking the Elixir AST and converting it into JavaScript AST and then to JavaScript code. This is done using the Elixir-ESTree library.

Requirements

Usage

ElixirScript can be used in the following ways:

Development

Clone the repo

git clone git@github.com:bryanjos/elixirscript.git

Get dependencies

mix deps.get
npm install

Compile

mix compile

Test

mix test

To build distributable tarball

mix ex2js.dist

`ex2js.tar.gz` will be in the `dist` folder

Usage

  usage: ex2js <input> [options]

  <input> path to elixir files or 
          the elixir code string if the -ex flag is used

  options:
  -o  --output [path]   places output at the given path
  -ex --elixir          read input as elixir code string
  -r  --root [path]     root path for standard libs
  -h  --help            this message

#Limitations

Not all of the Kernel.SpecialForms module is defined

The following aren't defined (yet):

Most of the Standard Library isn't defined yet

A lot of functions in the Kernel module are implemented. The Enum, Atom, List, Tuple, Logger, and Range modules are either fully defined are not complete. The rest still need to be implemented. Some modules like System or File may not be useful or function in the browser and may end up being only useful when using ElixirScript outside of the browser.

No Macro support

Not sure how this would be implemented right now, but looking for ideas.

Only rescue and after are currently supported on try expressions

Just because the translation of catch and else haven't been figured out just yet

Pattern matching works but is still limited

Pattern matching does work quite well now, but the implementation still needs to be thoroughly tested in a number of situations.

Currently pattern matching on bitstrings isn't supported, but for every other case that one would use pattern matching, it should work.

There are probably more that I'm forgetting. Check the issues for what's implemented and what still is needed.

Example projects