Developing Gillian#

Executing a command in the test environment#

esy lets you execute a command in a test environment where all built binaries and installed files are correctly added to your path. In particular, Gillian-JS, Gillian-C and wisl export specific environment variables that allow them to properly find their respective runtime files.

To run any command under this environment:

esy x <command>

To access the different manuals, you can use:

esy x gillian-js --help
esy x gillian-c --help
esy x wisl --help

You can get even more precise help about specific commands; for example:

esy x gillian-js verify --help

Rebuilding after modifications#

Since esy is our build system, running the esy command without any arguments will rebuild the project after modification.

You can automatically rebuild on changes by running:

esy watch

Code style#

You can automatically format the code by running:

esy format

It’s recommended that you install the provided git hooks (by running githooks/install.ml) to enforce code style.

We advise using the _intf trick where appropriate to avoid code duplication.

When you have a function that returns an option, and an extension-raising equivalent, you should name them foo and foo_exn respectively, rather than foo_opt and foo.

A rule of thumb for choosing whether to make a function argument labeled: is the argument’s purpose obvious from its type and the name of the function? If not, it should be labeled.

(* This doesn't need labels *)
val use_query: database -> query -> query_result

(* Wait, what's this weird first argument? Better make it labeled *)
val use_query: (string -> string) -> database -> query -> query_result

(* These arguments have the same type - how do I know which one is which? *)
val copy_content: channel -> channel -> unit

(* This is better *)
val copy_content : in:channel -> out:channel -> unit

Documentation#

Gillian’s documentation is built with sphinx, with an API reference generated using odoc.

Building Documentation#

  1. Install the prerequisites

    opam install odoc
    pip install sphinx furo
    
  2. Build the documentation

    esy docs
    

After building, you’ll find the sphinx documentation at _docs/sphinx, and the API reference at _docs/odoc.

Rebuild on change#

If you want to automatically rebuild on changes, take these additional steps.

  1. Install (more) prerequisites:

    apt install inotify-tools
    pip install sphinx-autobuild
    
  2. Watch for changes

    esy docs:watch