Home

Awesome

<p align="center"> <a href=""> <img alt="yo OCaml!" src="logo.png"> </a> </p> <p align="center"> A Yeoman generator that provides a functional boilerplate to easily scaffold OCaml modules. </p> <p align="center">

<a href="https://codeship.com/projects/132638"><img alt="Build Status" src="https://codeship.com/projects/33492670-b039-0133-9188-565ee1f98c10/status?branch=master"></a>

<a href="https://travis-ci.org/mabrasil/generator-ocaml"><img alt="Build Status" src="https://travis-ci.org/mabrasil/generator-ocaml.svg?branch=master"></a>

<a href="https://codeclimate.com/github/mabrasil/generator-ocaml"><img alt="Code Climate" src="https://codeclimate.com/github/mabrasil/generator-ocaml/badges/gpa.svg"/></a>

<a href="https://david-dm.org/mabrasil/generator-ocaml" title="Dependency status"><img src="https://david-dm.org/mabrasil/generator-ocaml.svg"/></a>

<a href="https://david-dm.org/mabrasil/generator-ocaml#info=devDependencies" title="devDependency status"><img src="https://david-dm.org/mabrasil/generator-ocaml/dev-status.svg"/></a>

</p>

Table of Contents

This Project

Scaffold OCaml modules?

<img src="http://i.imgur.com/f6AWgvy.png" align="left" alt="OCaml">

OCaml is a general purpose programming language with an emphasis on expressiveness and safety which supports both functional, imperative and object-oriented paradigms and features a powerful type system, user-definable algebraic data types and pattern-matching.

This project is Yeoman generator that provides a OCaml project skeleton with the following integrated features:

Getting To Know Yeoman

<img src="http://128bitstudios.com/images/logo/yeoman.png" align="right" alt="Yeoman">

Yeoman is a node.js tool used to scaffold new applications. It can create common project assets like stylesheets and JavaScript files. Basically Yo provides an easy way to create all of the boilerplate code you need to get started on a project.

Feel free to learn more about it here.

Installation

First, make sure you have the main dependencies:

Then install the generator-ocaml.

npm install -g generator-ocaml

Usage

<p align="center"> <a href=""> <img alt="yo OCaml!" src="http://i.imgur.com/qUjy4jZ.png" width="900px"> </a> </p>

Getting Started

  1. Generate your new project:
yo ocaml

You will be asked the following about your project:

And the you should see the following structure:

|-- lib/
|   |-- myModule.ml/
|-- test/
|   |-- myModule_test.ml
|-- .gitattributes
|-- .gitignore
|-- _oasis
|-- CHANGELOG.md
|-- CONTRIBUTING.md
|-- LICENSE.md
|-- Makefile
|-- README.md
  1. Install the OCaml dependencies:
opam init
opam install oasis ounit bisect
  1. Generate the setup.ml file - which will handle any high-level operation on the project source.
oasis setup
  1. Configure the build-system:
ocaml setup.ml -configure --enable-tests
  1. Build the project:
make

Other Options

To run the test suite, you just have to:

make tests
# Or
ocaml setup.ml -tests

Generating the documentation with OCamlDoc is just the same:

make doc
# Or
ocaml setup.ml -doc

These are the commands you have in setup.ml:

CommandDescription
-configure [options*]Configure the whole build process
-build [options*]Build executables and libraries
-doc [options*]Build documents
-test [options*]Run tests
-all [options*]Run configure, build, doc and test targets
-install [options*]Install libraries, data, executables and documents
-uninstall [options*]Uninstall libraries, data, executables and documents
-reinstall [options*]Uninstall and install libraries, data, executables and documents
-clean [options*]Clean files generated by a build
-distclean [options*]Clean files generated by a build and configure
-versionDisplay version of OASIS used to generate this setup.ml
-no-catch-exnDon't catch exception, useful for debugging
-quietRun quietly
-infoDisplay information message
-debugOutput debug message
-ignore-pluginsIgnore plugin's field
-help, --helpDisplay this list of options

Development

All the tasks needed for development automation are defined in the package.json scripts property and can be run via:

npm run <command>

Here is a summary of all the commands:

CommandDescription
setupInstalls global Node dependencies needed for development
lintRuns ESLint as a code linting utility
testsRuns Mocha in BDD mode.
reportRuns Istanbul coverage reports on Mocha tests
testRuns both lint, tests and report commands

Contributing

Contributions are very welcome! If you'd like to contribute, these guidelines may help you.

History

Check the releases list.

License

generator-ocaml is distributed under the MIT License, available in this repository.

All contributions are assumed to be also licensed under the same.

Credits

The templates codebase was originally inspired by these two projects.