Skip to content
/ mlx Public

OCaml .mlx syntax dialect which adds JSX syntax expressions

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE.mlx
Unknown
LICENSE.ocamlmerlin-mlx
Notifications You must be signed in to change notification settings

ocaml-mlx/mlx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f7a284d · Dec 16, 2024

History

62 Commits
Dec 16, 2024
Jun 3, 2024
May 5, 2024
Oct 19, 2024
Jun 3, 2024
Oct 19, 2024
Oct 19, 2024
Sep 27, 2023
Jun 19, 2024
Jun 3, 2024
Sep 1, 2023
Oct 19, 2024
Jun 19, 2024
Jun 19, 2024
Jun 3, 2024
Dec 6, 2024
Jun 3, 2024
Jun 19, 2024
Jun 19, 2024
Jun 19, 2024

Repository files navigation

mlx

An OCaml syntax dialect which adds JSX expressions to the language.

let header ~title () = 
  <header>
    <h1>title</h1>
  </header>

let page =
  <html>
    <body>
      <header title="Hello, world!" />
      <div>
        "Some content goes here"
      </div>
    </body>
  </html>

This code is transformed into the following OCaml code:

let header ~title () =
  header () ~children:[ h1 () ~children:[ title ] [@JSX]; ] [@JSX]

let page =
  html () ~children:[
    body () ~children:[
      header () ~title:"Hello, world!" [@JSX];
      div () ~children:[ "Some content goes here" ] [@JSX];
    ] [@JSX];
  ] [@JSX]

It is expected to use mlx-pp preprocessor with either a runtime lib which provides the implementation of such functions or a ppx which which further transforms [@JSX] attributes into the desired output.

Installation & Usage

Use the following commands to install the necessary packages:

opam install mlx ocamlmerlin-mlx

To make dune consider .mlx files as OCaml files you need to configure an mlx dialect, put this in your dune-project file:

(dialect
 (name mlx)
 (implementation
  (extension mlx)
  (merlin_reader mlx)
  (preprocess
   (run mlx-pp %{input-file}))))

Editor Support

VS Code

Syntax highlighting support for VS Code is still work in progress. As a temporary workaround, you can enable basic OCaml syntax highlighting by adding this to your settings:

{
  "files.associations": {
    "*.mlx": "ocaml"
  }
}

Neovim

For Neovim users, install plugin: https://github.com/ocaml-mlx/ocaml_mlx.nvim

Useful Links