package reason
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=a58837f14a79f047c8eb99d5518aeb16ee64353574286cfd5b284c98a1a27250
sha512=28d6d1c3636e400614b1a7d8c78b0bbb5de143e259edf683139b75d2fd2013da8e1a6c58d11047e6853f1e559c387d233570665de0de646005197b5f4d6f4879
doc/reason.easy_format/Vendored_easy_format/index.html
Module Vendored_easy_format
Source
Easy_format: indentation made easy.
This module provides a functional, simplified layer over the Format module of the standard library.
Input data must be first modelled as a tree using 3 kinds of nodes:
- atoms
- lists
- labelled nodes
Atoms represent any text that is guaranteed to be printed as-is. Lists can model any sequence of items such as arrays of data or lists of definitions that are labelled with something like "int main", "let x =" or "x:".
List wrapping conditions:
`Wrap_atoms
: wrap if the list contains only atoms`Always_wrap
: always wrap when needed`Never_wrap
: never wrap, i.e. the list is either horizontal or vertical`Force_breaks
: align vertically, i.e. always break line between list items and align the left edge of each item.`Force_breaks_rec
: same as`Force_breaks
but turns any wrappable ancestor node's wrap property (`Wrap_atoms
or`Always_wrap
) into`Force_breaks
.`No_breaks
: align horizontally, i.e. never break line between list items
When to break the line after a Label
:
Auto
: break after the label if there's not enough roomAlways
: always break after the labelAlways_rec
: always break after the label and force breaks in all parent lists and labels, similarly to`Force_breaks_rec
for lists.Never
: never break after the label
Pair of opening and closing tags that are inserted around text after pretty-printing.
type list_param = {
space_after_opening : bool;
(*Whether there must be some whitespace after the opening string. Default:
*)true
space_after_separator : bool;
(*Whether there must be some whitespace after the item separators. Default:
*)true
space_before_separator : bool;
(*Whether there must be some whitespace before the item separators. Default:
*)false
separators_stick_left : bool;
(*Whether the separators must stick to the item on the left. Default:
*)true
space_before_closing : bool;
(*Whether there must be some whitespace before the closing string. Default:
*)true
stick_to_label : bool;
(*Whether the opening string should be fused with the preceding label. Default:
*)true
align_closing : bool;
(*Whether the beginning of the closing string must be aligned with the beginning of the opening string (stick_to_label = false) or with the beginning of the label if any (stick_to_label = true). Default:
*)true
wrap_body : wrap;
(*Defines under which conditions the list body may be wrapped, i.e. allow several lines and several list items per line. Default:
*)`Wrap_atoms
indent_body : int;
(*Extra indentation of the list body. Default:
*)2
list_style : style_name option;
(*Default:
*)None
opening_style : style_name option;
(*Default:
*)None
body_style : style_name option;
(*Default:
*)None
separator_style : style_name option;
(*Default:
*)None
closing_style : style_name option;
(*Default:
*)None
}
List-formatting parameters. Always derive a new set of parameters from an existing record. See Easy_format.list
.
Default list-formatting parameters, using the default values described in the type definition above.
In order to make code compatible with future versions of the library, the record inheritance syntax should be used, e.g. { list with align_closing = false }
. If new record fields are added, the program would still compile and work as before.
type label_param = {
label_break : label_break;
(*Whether to break the line after the label. Introduced in version 1.2.0. Default:
*)`Auto
space_after_label : bool;
(*Whether there must be some whitespace after the label. Default:
*)true
indent_after_label : int;
(*Extra indentation before the item that comes after a label. Default:
*)2
label_style : style_name option;
(*Default:
*)None
}
Label-formatting parameters. Always derive a new set of parameters from an existing record. See Easy_format.label
.
Default label-formatting parameters, using the default values described in the type definition above.
In order to make code compatible with future versions of the library, the record inheritance syntax should be used, e.g. { label with indent_after_label = 0 }
. If new record fields are added, the program would still compile and work as before.
type t =
| Atom of string * atom_param
(*Plain string normally without line breaks.
*)| List of string * string * string * list_param * t list
(*
*)List ((opening, separator, closing, param), nodes)
| Label of t * label_param * t
(*
*)Label ((label, param), node)
: labelled node.| Custom of Format.formatter -> unit
(*User-defined printing function that allows to use the Format module directly if necessary. It is responsible for leaving the formatter in a clean state.
*)
The type of the tree to be pretty-printed. Each node contains its own formatting parameters.
Detail of a list node List ((opening, separator, closing, param), nodes)
:
opening
: opening string such as"\{"
"["
"("
"begin"
""
etc.separator
: node separator such as";"
","
""
"+"
"|"
etc.closing
: closing string such as"\}"
"]"
")"
"end"
""
etc.nodes
: elements of the list.
type escape = [
| `None
| `Escape of (string -> int -> int -> unit) -> string -> int -> int -> unit
| `Escape_string of string -> string
]