tjdevries / ocaml.nvim

80 stars 4 forks source link

ocaml.nvim

This plugin requires the new dune:

You also need to run make for the plugin on installation

New Filetypes

.ml -> ocaml
.mli -> ocaml.interface
.mll -> ocaml.ocamllex
.mly -> ocaml.menhir
.t -> ocaml.cram

Overview

Tools for working with OCaml. Status is very work in progress and likely to break. Use at your own risk (but feel free to file issues)

Just some utilties for working with ppx_rapper.

If you're not using OCaml (you should be) then this plugin is worthless to you.

Installation

return {
    { "tjdevries/ocaml.nvim", build = "make" }
}
require('ocaml').setup()

Features

Feature: Highlighting

let create_query =
  [%rapper
    get_one
      {|
      INSERT INTO resources (name)
      VALUES (%string{name})
      RETURNING @int{id}
    |}]
;;

You can customize the colors by doing something like:

hi! link @rapper_argument @parameter
hi! link @rapper_return @type
module SomeGraphql = [%graphql
  {| mutation deposit($account: String, $amount: UInt64) {
    changeBalance(account: $account) {
      payment {
        id
      }
    }
  } |}
];

You just need to have graphql grammar installed.

Feature: Easily update types in .ml/.mli files

You can map a function to easily update the corresponding type in your .ml or .mli files, by doing:

-- Use <leader>out to update the type
vim.keymap.set("n", "<leader>out", require('ocaml.actions').update_interface_type, { desc = "[O]caml [U]pdate [T]ype" })