Provided by: ocamlformat_0.27.0-1build4_amd64 

NAME
ocamlformat - A tool to format OCaml code.
SYNOPSIS
ocamlformat [OPTION]… [SRC]…
DESCRIPTION
ocamlformat automatically formats OCaml code.
OPTIONS (CODE FORMATTING STYLE)
Unless otherwise noted, any option --option=VAL detailed in this section can be set in many ways, its
value is determined in the following order (of increasing priority): the default value is used if no
other value is specified. The value of a boolean option --foo or --no-foo can be modified in an
.ocamlformat configuration file with 'foo = {true,false}', it can be done for any other option with an
'option = VAL' line (*), or using the OCAMLFORMAT environment variable:
OCAMLFORMAT=option=VAL,...,option=VAL, or as an optional parameter on the command line, or with a global
[@@@ocamlformat "option=VAL"] attribute in the processed file, or with an [@@ocamlformat "option=VAL"]
attribute on expression in the processed file.
(*) .ocamlformat files in current and all ancestor directories for each input file are used, applied from
top to bottom, overriding the settings each time a file is applied, stopping at the project root. If no
project root and no ocamlformat file has been found, and if the option enable-outside-detected-project is
set, the global ocamlformat file defined in $XDG_CONFIG_HOME (or in $HOME/.config if $XDG_CONFIG_HOME is
undefined) is used.
If the disable option is not set, an .ocamlformat-ignore file specifies files that OCamlFormat should
ignore. Each line in an .ocamlformat-ignore file specifies a filename relative to the directory
containing the .ocamlformat-ignore file. Shell-style regular expressions are supported. Lines starting
with # are ignored and can be used as comments.
If the disable option is set, an .ocamlformat-enable file specifies files that OCamlFormat should format
even when the disable option is set. Each line in an .ocamlformat-enable file specifies a filename
relative to the directory containing the .ocamlformat-enable file. Shell-style regular expressions are
supported. Lines starting with # are ignored and can be used as comments.
--assignment-operator={end-line|begin-line}
Position of the assignment operator. end-line positions assignment operators (`:=` and `<-`) at the
end of the line and breaks after it if the whole assignment expression does not fit on a single line.
begin-line positions assignment operators (`:=` and `<-`) at the beginning of the line and breaks
before it if the whole assignment expression does not fit on a single line. The default value is
end-line.
--break-before-in={fit-or-vertical|auto}
Whether the line should break before the in keyword of a let binding. fit-or-vertical will always
break the line before the in keyword if the whole let binding does not fit on a single line. auto
will only break the line if the in keyword does not fit on the previous line. The default value is
fit-or-vertical.
--break-cases={fit|nested|toplevel|fit-or-vertical|vertical|all}
Break pattern match cases. Specifying fit lets pattern matches break at the margin naturally. nested
forces a break after nested or-patterns to highlight the case body. Note that with nested, the
indicate-nested-or-patterns option is not needed, and so ignored. toplevel forces top-level cases
(i.e. not nested or-patterns) to break across lines, otherwise break naturally at the margin.
fit-or-vertical tries to fit all or-patterns on the same line, otherwise breaks. vertical vertically
breaks branches. all forces all pattern matches to break across lines. The default value is fit.
--break-collection-expressions={fit-or-vertical|wrap}
Break collection expressions (lists and arrays) elements by elements. fit-or-vertical vertically
breaks expressions if they do not fit on a single line. wrap will group simple expressions and try to
format them in a single line. The default value is fit-or-vertical.
--break-colon={after|before}
Break before or after colon in value binding declarations and type constraints. after breaks after
the colon. before breaks before the colon. The default value is after.
--break-fun-decl={wrap|fit-or-vertical|smart}
Style for function declarations and types. wrap breaks only if necessary. fit-or-vertical vertically
breaks arguments if they do not fit on a single line. smart is like fit-or-vertical but try to fit
arguments on their line if they fit. The default value is wrap.
--break-fun-sig={wrap|fit-or-vertical|smart}
Style for function signatures. wrap breaks only if necessary. fit-or-vertical vertically breaks
arguments if they do not fit on a single line. smart is like fit-or-vertical but try to fit arguments
on their line if they fit. The default value is wrap.
--break-infix={wrap|fit-or-vertical|wrap-or-vertical}
Break sequence of infix operators. wrap will group simple expressions and try to format them in a
single line. fit-or-vertical vertically breaks expressions if they do not fit on a single line.
wrap-or-vertical behaves like wrap for high precedence operators and behaves like fit-or-vertical for
low precedence operators. The default value is wrap.
--break-infix-before-func
Break infix operators whose right arguments are anonymous functions specially: do not break after the
operator so that the first line of the function appears docked at the end of line after the operator.
The flag is unset by default.
--break-separators={after|before}
Break before or after separators such as `;` in list or record expressions. after breaks the
expressions after the separator. before breaks the expressions before the separator. The default
value is after.
--break-sequences
Force sequence expressions to break irrespective of margin. The flag is set by default.
--break-string-literals={auto|never}
Break string literals. auto mode breaks lines at newlines and wraps string literals at the margin.
never mode formats string literals as they are parsed, in particular, with escape sequences expanded.
The default value is auto.
--break-struct={force|natural}
Break struct-end module items. force will break struct-end phrases unconditionally. natural will
break struct-end phrases naturally at the margin. The default value is force.
--cases-exp-indent=COLS
Indentation of cases expressions (COLS columns). See also the cases-matching-exp-indent and
nested-match options. The default value is 4. Cannot be set in attributes.
--cases-matching-exp-indent={normal|compact}
Indentation of cases right-hand sides which are `match` or `try` expressions. normal indents as it
would any other expression. compact forces an indentation of 2, unless nested-match is set to align
and we're on the last case. The default value is normal.
--disambiguate-non-breaking-match
Add parentheses around matching constructs that fit on a single line. The flag is unset by default.
--doc-comments={after-when-possible|before-except-val|before}
Doc comments position. after-when-possible puts doc comments after the corresponding code. This
option has no effect on variant declarations because that would change their meaning and on
structures, signatures and objects for readability. before-except-val puts doc comments before the
corresponding code, but puts doc comments of val and external declarations after the corresponding
declarations. before puts comments before the corresponding code. The default value is
after-when-possible.
--doc-comments-padding=PADDING
Add PADDING spaces before doc comments in type declarations. The default value is 2.
--doc-comments-tag-only={default|fit}
Position of doc comments with only tags. default means no special treatment. fit puts doc comments on
the same line. The default value is default.
--dock-collection-brackets
Dock the brackets of lists, arrays and records, so that when the collection does not fit on a single
line the brackets are opened on the preceding line and closed on the following line. The flag is set
by default.
--exp-grouping={parens|preserve}
Style of expression grouping. parens groups expressions using parentheses. preserve preserves the
original grouping syntax (parentheses or begin/end). The default value is parens. Cannot be set in
attributes.
--extension-indent=COLS
Indentation of items inside extension nodes (COLS columns). The default value is 2.
--field-space={loose|tight|tight-decl}
Whether or not to use a space between a field name and the punctuation symbol (`:` or `=`) preceding
the rhs. This option affects records and objects. loose uses a space. tight does not use a space.
tight-decl is tight for declarations and loose for instantiations. The default value is loose.
--function-indent=COLS
Indentation of function cases (COLS columns). The default value is 2.
--function-indent-nested={never|always|auto}
Whether the function-indent parameter should be applied even when in a sub-block. never only applies
function-indent if the function block starts a line. always always apply function-indent. auto
applies function-indent when seen fit. The default value is never.
--if-then-else={compact|fit-or-vertical|vertical|keyword-first|k-r}
If-then-else formatting. compact tries to format an if-then-else expression on a single line.
fit-or-vertical vertically breaks branches if they do not fit on a single line. vertical always
vertically breaks branches. keyword-first formats if-then-else expressions such that the if-then-else
keywords are the first on the line. k-r formats if-then-else expressions with parentheses that match
the K&R style. The default value is compact.
--indent-after-in=COLS
Indentation (COLS columns) after `let ... in`, unless followed by another `let`. The default value is
0. Cannot be set in attributes.
--indicate-multiline-delimiters={no|space|closing-on-separate-line}
How to indicate that two matching delimiters live on different lines. no doesn't do anything special
to indicate the closing delimiter. space prints a space inside the delimiter to indicate the matching
one is on a different line. closing-on-separate-line makes sure that the closing delimiter is on its
own line. The default value is no.
--indicate-nested-or-patterns={unsafe-no|space}
Control whether or not to indicate nested or-pattern using indentation. unsafe-no does not indicate
nested or-patterns. Warning: this can produce confusing code where a short body of a match case is
visually hidden by surrounding long patterns, leading to misassociation between patterns and body
expressions. space starts lines of nested or-patterns with " |" rather than "| ". The default value
is unsafe-no.
--infix-precedence={indent|parens}
Use indentation or also discretionary parentheses to explicitly disambiguate precedences of infix
operators. indent uses indentation to explicitly disambiguate precedences of infix operators. parens
uses parentheses to explicitly disambiguate precedences of infix operators. The default value is
indent.
--leading-nested-match-parens
Nested match parens formatting. The flag is unset by default. Cannot be set in attributes.
--let-and={compact|sparse}
Style of let_and. compact will try to format `let p = e and p = e` in a single line. sparse will
always break between them. The default value is compact.
--let-binding-deindent-fun
Deindent a line beginning with `fun`. The flag is set by default.
--let-binding-indent=COLS
Indentation of let binding expressions (COLS columns) if they do not fit on a single line. The
default value is 2. Cannot be set in attributes.
--let-binding-spacing={compact|sparse|double-semicolon}
Spacing between let binding. compact spacing separates adjacent let bindings in a module according to
module-item-spacing. sparse places two open lines between a multi-line module-level let binding and
the next. double-semicolon places double semicolons and an open line between a multi-line
module-level let binding and the next. The default value is compact.
--let-module={compact|sparse}
Module binding formatting. compact does not break a line after the let module ... = and before the in
if the module declaration does not fit on a single line. sparse breaks a line after let module ... =
and before the in if the module declaration does not fit on a single line. The default value is
compact.
--line-endings={lf|crlf}
Line endings used. lf uses Unix line endings. crlf uses Windows line endings. The default value is
lf. Cannot be set in attributes.
-m COLS, --margin=COLS
Format code to fit within COLS columns. The default value is 80. Cannot be set in attributes.
--match-indent=COLS
Indentation of match/try cases (COLS columns). The default value is 0.
--match-indent-nested={never|always|auto}
Whether the match-indent parameter should be applied even when in a sub-block. never only applies
match-indent if the match block starts a line. always always apply match-indent. auto applies
match-indent when seen fit. The default value is never.
--max-indent=COLS
Maximum offset (COLS columns) added to a new line in addition to the offset of the previous line. The
default value is 68. Cannot be set in attributes.
--module-item-spacing={compact|sparse|preserve}
Spacing between items of structures and signatures. compact will not leave open lines between
one-liners of similar sorts. sparse will always break a line between two items. preserve will not
leave open lines between one-liners of similar sorts unless there is an open line in the input. The
default value is compact.
--nested-match={wrap|align}
Style of a pattern-matching nested in the last case of another pattern-matching. wrap wraps the
nested pattern-matching with parentheses and adds indentation. align vertically aligns the nested
pattern-matching under the encompassing pattern-matching. The default value is wrap.
--no-break-infix-before-func
Unset break-infix-before-func.
--no-break-sequences
Unset break-sequences.
--no-disambiguate-non-breaking-match
Unset disambiguate-non-breaking-match.
--no-dock-collection-brackets
Unset dock-collection-brackets.
--no-leading-nested-match-parens
Unset leading-nested-match-parens.
--no-let-binding-deindent-fun
Unset let-binding-deindent-fun.
--no-ocp-indent-compat
Unset ocp-indent-compat.
--no-parens-ite
Unset parens-ite.
--no-parse-docstrings
Unset parse-docstrings.
--no-parse-toplevel-phrases
Unset parse-toplevel-phrases.
--no-space-around-arrays
Unset space-around-arrays.
--no-space-around-lists
Unset space-around-lists.
--no-space-around-records
Unset space-around-records.
--no-space-around-variants
Unset space-around-variants.
--no-wrap-comments
Unset wrap-comments.
--no-wrap-fun-args
Unset wrap-fun-args.
--ocp-indent-compat
Attempt to generate output which does not change (much) when post-processing with ocp-indent. The
flag is unset by default.
-p {default|conventional|ocamlformat|janestreet}, --profile={default|conventional|ocamlformat|janestreet}
Select a preset profile which sets all options, overriding lower priority configuration. default is
an alias for the conventional profile. The conventional profile aims to be as familiar and
"conventional" appearing as the available options allow. The ocamlformat profile aims to take
advantage of the strengths of a parsetree-based auto-formatter, and to limit the consequences of the
weaknesses imposed by the current implementation. This is a style which optimizes for what the
formatter can do best, rather than to match the style of any existing code. General guidelines that
have directed the design include: Legibility, in the sense of making it as hard as possible for quick
visual parsing to give the wrong interpretation, is of highest priority; Whenever possible the
high-level structure of the code should be obvious by looking only at the left margin, in particular,
it should not be necessary to visually jump from left to right hunting for critical keywords, tokens,
etc; All else equal compact code is preferred as reading without scrolling is easier, so indentation
or white space is avoided unless it helps legibility; Attention has been given to making some
syntactic gotchas visually obvious. The janestreet profile is used at Jane Street. The default value
is default.
--parens-ite
Uses parentheses around if-then-else branches that spread across multiple lines. The flag is unset by
default.
--parens-tuple={always|multi-line-only}
Parens tuple expressions. always always uses parentheses around tuples. multi-line-only mode will try
to skip parens for single-line tuples. The default value is always.
--parens-tuple-patterns={multi-line-only|always}
Parens tuple patterns. multi-line-only mode will try to skip parens for single-line tuple patterns.
always always uses parentheses around tuples patterns. The default value is multi-line-only.
--parse-docstrings
Parse and format docstrings. The flag is set by default.
--parse-toplevel-phrases
Parse and format toplevel phrases and their output. The flag is unset by default.
--sequence-blank-line={preserve-one|compact}
Blank line between expressions of a sequence. preserve will keep a blank line between two expressions
of a sequence if the input contains at least one. compact will not keep any blank line between
expressions of a sequence. The default value is preserve-one.
--sequence-style={terminator|separator|before}
Style of sequence. terminator only puts spaces after semicolons. separator puts spaces before and
after semicolons. before breaks the sequence before semicolons. The default value is terminator.
--single-case={compact|sparse}
Style of pattern matching expressions with only a single case. compact will try to format a single
case on a single line. sparse will always break the line before a single case. The default value is
compact.
--space-around-arrays
Add a space inside the delimiters of arrays. The flag is set by default.
--space-around-lists
Add a space inside the delimiters of lists. The flag is set by default.
--space-around-records
Add a space inside the delimiters of records. The flag is set by default.
--space-around-variants
Add a space inside the delimiters of variants. The flag is set by default.
--stritem-extension-indent=COLS
Indentation of structure items inside extension nodes (COLS columns). The default value is 0.
--type-decl={compact|sparse}
Style of type declaration. compact will try to format constructors and records definition in a single
line. sparse will always break between constructors and record fields. The default value is compact.
--type-decl-indent=COLS
Indentation of type declarations (COLS columns) if they do not fit on a single line. The default
value is 2. Cannot be set in attributes.
--wrap-comments
Comments are divided into paragraphs by open lines (two or more consecutive newlines), and each
paragraph is wrapped at the margin. Multi-line comments with vertically-aligned asterisks on the left
margin are not wrapped. Consecutive comments with both left and right margin aligned are not wrapped
either. The flag is unset by default.
--wrap-fun-args
Style for function call. The flag is set by default.
OPTIONS (REMOVED)
--align-cases=VAL
This option has been removed in version 0.22.
--align-constructors-decl=VAL
This option has been removed in version 0.22.
--align-variants-decl=VAL
This option has been removed in version 0.22.
--doc-comments-val=VAL
This option has been removed in version 0.16. If you are using `doc-comments-val=before` in
combination with `doc-comments=before` then only `doc-comments=before` is now required to achive the
same behavior. If you are using `doc-comments-val=before` in combination with `doc-comments=after`
this behavior is not available anymore. If you are using `doc-comments-val=after` in combination with
`doc-comments=before` please now use `doc-comments=before-except-val`. If you are using
`doc-comments-val=after` in combination with `doc-comments=after` then only
`doc-comments=after-when-possible` is now required to achieve the same behavior. If you are using
`doc-comments-val=unset` the same behavior can now be achieved by setting `doc-comments` only.
--escape-chars=VAL
This option has been removed in version 0.16. Concrete syntax will now always be preserved.
--escape-strings=VAL
This option has been removed in version 0.16. Concrete syntax will now always be preserved.
--extension-sugar=VAL
This option has been removed in version 0.17. Concrete syntax will now always be preserved.
--let-open=VAL
This option has been removed in version 0.17. Concrete syntax will now always be preserved.
OPTIONS
Unless mentioned otherwise non-formatting options cannot be set in attributes or .ocamlformat files.
-c VAL, --config=VAL (absent OCAMLFORMAT env)
Aggregate options. Options are specified as a comma-separated list of pairs:
option=VAL,...,option=VAL.
--check
Check whether the input files already are formatted. Mutually exclusive with --inplace and --output.
--comment-check
Control whether to check comments and documentation comments. Unsafe to turn off. May be set in
.ocamlformat. The flag is set by default.
--disable
Disable ocamlformat. This is used in attributes to locally disable automatic code formatting. One can
also use [@@@ocamlformat "enable"] instead of [@@@ocamlformat "disable=false"]. The flag is unset by
default.
--disable-conf-attrs
Disable configuration in attributes. The flag is unset by default.
--disable-conf-files
Disable .ocamlformat configuration files.
--disable-outside-detected-project
If no .ocamlformat config files have been detected, disable the formatting. OCamlFormat is disabled
outside of a detected project by default, to enable the opposite behavior use
--enable-outside-detected-project.
--doc
Parse input as an odoc documentation.
--enable-outside-detected-project
Read .ocamlformat config files outside the current project when no project root has been detected for
the input file. The project root of an input file is taken to be the nearest ancestor directory that
contains a .git or .hg or dune-project file. If .ocamlformat config files are located in the same
directory or parents they are applied, if no .ocamlformat file is found then the global configuration
defined in $XDG_CONFIG_HOME/.ocamlformat (or in $HOME/.config/.ocamlformat if $XDG_CONFIG_HOME is
undefined) is applied.
-g, --debug
Generate debugging output. The flag is unset by default.
-i, --inplace
Format in-place, overwriting input file(s).
--ignore-invalid-option
Ignore invalid options (e.g. in .ocamlformat).
--impl
Parse input as an implementation.
--intf
Parse input as an interface.
--margin-check
Emit a warning if the formatted output exceeds the margin. The flag is unset by default.
-n N, --max-iters=N
Fail if output of formatting does not stabilize within N iterations. May be set in .ocamlformat. The
default value is 10.
--name=NAME
Name of input file for use in error reporting and starting point when searching for '.ocamlformat'
files. Defaults to the input file name. Some options can be specified in configuration files named
'.ocamlformat' in the same or a parent directory of NAME, see documentation of other options for
details.
--no-comment-check
Unset comment-check.
--no-debug
Unset debug.
--no-disable
Unset disable.
--no-disable-conf-attrs
Unset disable-conf-attrs.
--no-margin-check
Unset margin-check.
--no-quiet
Unset quiet.
--no-version-check
Unset version-check.
-o DST, --output=DST
Output file. Mutually exclusive with --inplace. Write to stdout if omitted.
--ocaml-version=V
Version of OCaml syntax of the output. The default value is 4.04.0.
--ocp-indent-config
Read .ocp-indent configuration files. base is an alias for let-binding-indent. type is an alias for
type-decl-indent. in is an alias for indent-after-in. with sets function-indent and match-indent.
match_clause is an alias for cases-exp-indent. ppx_stritem_ext is an alias for
stritem-extension-indent. max_indent is an alias for max-indent. strict_with sets
function-indent-nested and match-indent-nested.
--print-config
Print the configuration determined by the environment variable, the configuration files, preset
profiles and command line. Attributes are not considered. If many input files are specified, only
print the configuration for the first file. If no input file is specified, print the configuration
for the root directory if specified, or for the current working directory otherwise.
-q, --quiet
Quiet. May be set in .ocamlformat. The flag is unset by default.
--repl-file
Parse input as toplevel phrases with their output.
--root=DIR
Root of the project. If specified, only take into account .ocamlformat configuration files inside DIR
and its subdirectories.
--use-file
Deprecated. Same as impl.
--version-check
Check that the version matches the one specified in .ocamlformat. The flag is set by default.
SRC Input files. At least one is required, and exactly one without --inplace. If - is passed, will read
from stdin.
COMMON OPTIONS
--help[=FMT] (default=auto)
Show this help in format FMT. The value FMT must be one of auto, pager, groff or plain. With auto,
the format is pager or plain whenever the TERM env var is dumb or undefined.
--version
Show version information.
EXIT STATUS
ocamlformat exits with:
0 on success.
123 on indiscriminate errors reported on standard error.
124 on command line parsing errors.
125 on unexpected internal errors (bugs).
ENVIRONMENT
These environment variables affect the execution of ocamlformat:
OCAMLFORMAT
See option --config.
Ocamlformat 0.27.0 OCAMLFORMAT(1)