1OCP-INDENT(1) Ocp-indent Manual OCP-INDENT(1)
2
3
4
6 ocp-indent - Automatic indentation of OCaml source files
7
9 ocp-indent [OPTION]... [FILE]...
10
12 Indent OCaml source files according to the official conventions, with a
13 small number of tunable parameters.
14
15 Outputs the indented version of each FILE given in the command line to
16 standard output, unless invoked with the `--inplace' option (see
17 OPTIONS below). If no FILE is provided, reads from standard input.
18
20 Parameters can be defined on the command-line via the --config option,
21 or as a configuration definition in one of the following, searched in
22 order: a file named `.ocp-indent' in the current directory or its
23 parents (which allows for per-project indentation settings), the file
24 `$HOME/.ocp/ocp-indent.conf', or the environment variable
25 $OCP_INDENT_CONFIG.
26
27 A configuration definition is a list of bindings in the form NAME=VALUE
28 or of PRESET, separated by commas or newlines
29
30 Syntax: [PRESET,]VAR=VALUE[,VAR=VALUE...]
31
32 base=INT (default=2)
33 Indentation used when none of the following options applies.
34
35 let foo =
36 ..bar
37
38 type=INT (default=2)
39 Indentation for type definitions.
40
41 type t =
42 ..int
43
44 in=INT (default=0)
45 Indentation after `let ... in', unless followed by another `let'.
46
47 let foo = () in
48 ..bar
49
50 with=INT (default=0)
51 Indentation after `match ... with', `try ... with' or `function'.
52
53 match foo with
54 ..| _ -> bar
55
56 match_clause=INT (default=2)
57 Indentation for clauses inside a pattern-match (after arrows).
58
59 match foo with
60 | _ ->
61 ..bar
62
63 ppx_stritem_ext=INT (default=2)
64 Indentation for items inside a [%%id ... ] extension node).
65
66 [%% id.id
67
68 ..let x = 3 ]
69
70 max_indent=<INT|none> (default=4)
71 When nesting expressions on the same line, their indentations are
72 stacked in some cases so that they remain correct if you close them
73 one per line. However, this can lead to large indentations in
74 complex code, so this parameter sets a maximum indentation. Note
75 that it only affects indentation after function arrows and opening
76 parens at the ends of lines.
77
78 let f = g (h (i (fun x ->
79 ....x)
80 )
81 )
82
83 strict_with=<always|never|auto> (default=never)
84 If `never', match bars are indented, superseding `with', whenever
85 `match with' doesn't start its line. If `auto', there are
86 exceptions for constructs like `begin match with'. If `always',
87 `with' is always strictly respected, and additionally applies to
88 variant types definition, for consistency.
89
90 Example with `strict_with=never,with=0':
91 begin match foo with
92 ..| _ -> bar
93 end
94
95 strict_else=<always|never|auto> (default=always)
96 If `always', indent after the `else' keyword normally, like after
97 `then'. If `auto', indent after `else' unless in a few "unclosable"
98 cases (`let .... in', `match', etc.). If `never', the `else'
99 keyword won't indent when followed by a newline.
100
101 Example with `strict_else=auto':
102 if cond then
103 foo
104 else
105 let x = bar in
106 baz
107
108 strict_comments=BOOL (default=false)
109 In-comment indentation is normally preserved, as long as it
110 respects the left margin or the comments starts with a newline.
111 Setting this to `true' forces alignment within comments. Lines
112 starting with `*' are always aligned
113
114 align_ops=BOOL (default=true)
115 Toggles preference of column-alignment over line indentation for
116 most of the common operators and after mid-line opening
117 parentheses.
118
119 Example with `align_ops=true':
120 let f x = x
121 + y
122
123 Example with `align_ops=false':
124 let f x = x
125 + y
126
127 align_params=<always|never|auto> (default=auto)
128 If `never', function parameters are indented one level from the
129 line of the function. If `always', they are aligned from the column
130 of the function. if `auto', alignment is chosen over indentation in
131 a few cases, e.g. after match arrows
132
133 Example with `align_params=never':
134 match foo with
135 | _ -> some_fun
136 ..parameter
137
138 Example with `align_params=always' or `auto':
139 match foo with
140 | _ -> some_fun
141 ..parameter
142
143 Available presets are `normal', the default, `apprentice' which may
144 make some aspects of the syntax more obvious for beginners, and
145 `JaneStreet'.
146
148 -c CONFIG, --config=CONFIG
149 Configure the indentation parameters. See section CONFIGURATION for
150 more information.
151
152 -d, --debug
153 Enable debug output to stderr.
154
155 --help[=FMT] (default=auto)
156 Show this help in format FMT. The value FMT must be one of `auto',
157 `pager', `groff' or `plain'. With `auto', the format is `pager` or
158 `plain' whenever the TERM env var is `dumb' or undefined.
159
160 -i, --inplace
161 Re-indent files in-place.
162
163 --indent-empty
164 Return indent for empty lines, too. Especially usefull with
165 --numeric.
166
167 -l RANGE, --lines=RANGE (absent=-)
168 Only re-indent the lines in RANGE (eg. 10-12), adapting to the
169 current indentation of surrounding lines. Lines start at 1.
170
171 --load-mods=VAL
172 Load plugins.
173
174 --load-pkgs=VAL
175 Load plugins.
176
177 --numeric
178 Instead of re-indenting the file, output one integer per line
179 representing the indentation value. When specified together with
180 --lines, only print as many values as lines in the range.
181
182 -o FILE, --output=FILE
183 Output to FILE. The default is to print to stdout.
184
185 --print-config
186 Print the current parameters to stdout and exit. (See section
187 CONFIGURATION for more information.)
188
189 --syntax=VAL
190 Extend the handled syntax for OCaml syntax extensions.
191
192 --version
193 Show version information.
194
196 Bugs are tracked on github at
197 https://github.com/OCamlPro/ocp-indent/issues. The tests directory of
198 the source distribution is a good snapshot of the current status, and
199 can be checked online at
200 http://htmlpreview.github.io/?https://github.com/OCamlPro/ocp-indent/blob/master/tests/failing.html
201
203 ocaml(1), ocp-index(1)
204
206 Louis Gesbert and Thomas Gazagnaire from OCamlPro, from an original
207 prototype by Jun Furuse.
208
210 Copyright (C) 2013 OCamlPro.
211
212 ocp-indent is free software, released under the terms of the GNU
213 General Public License version 3, the text of which can be found in the
214 file `LICENSE' distributed with the sources.
215
216
217
218Ocp-indent OCP-INDENT(1)