OCamlFormat 0.14.0
See full changelog
New features
- Add an option
--format-invalid-files
to print unparsable parts of the input as verbatim text. This feature is still experimental. (#1026, @gpetiot) - Support multi-indices extended indexing operators (#1279, #1277, @Julow, @gpetiot). This feature has been added in OCaml 4.10.0
- Handle OCaml 4.10.0 AST (#1276, @gpetiot)
- Preserve functor syntax for consistency (#1312, @gpetiot).
Previously both functor syntax:
module M = functor (K : S) -> struct end
andmodule M (K : S) = struct end
would be formatted as the latter, the original syntax is now preserved.
Changes
- Add the option
doc-comments-val=before|after
(#1012, @Julow). This option set the placement of documentation comment onval
andexternal
only. It is set toafter
by default. - The default for
doc-comments
is changed fromafter
tobefore
(#1012, #1325, @Julow). This affects bothconventional
(default) andocamlformat
profiles. - Some options are now deprecated:
doc-comments
(#1293, #1012). This option depends on a flawed heuristic. It is replaced bydoc-comments-val
forval
andexternal
declarations. There is no equivalent to this option in the general case.escape-chars
,escape-strings
andextension-sugar
(#1293). These options are rarely used and their default behavior is considered to be the right behavior.
- Add space between
row_field
attributes and the label or arguments, to be consistent with the non-polymorphic case. (#1299, @CraigFe)
Bug fixes
- Fix missing parentheses around
let open
(#1229, @Julow). eg.M.f (M.(x) [@attr])
would be formatted toM.f M.(x) [@attr]
, which would crash OCamlformat - Remove unecessary parentheses with attributes in some structure items:
- extensions and eval items (#1230, @Julow).
eg. the expression
[%ext (() [@attr])]
or the structure item(() [@attr]) ;;
let _ = ...
constructs (#1244, @emillon)
- extensions and eval items (#1230, @Julow).
eg. the expression
- Fix some bugs related to comments:
- after a function on the rhs of an infix (#1231, @Julow).
eg. the comment in
(x >>= fun y -> y (* A *))
would be dropped - in module unpack (#1309, @Julow).
eg. in the module expression
module M = (val x : S (* A *))
- after a function on the rhs of an infix (#1231, @Julow).
eg. the comment in
- Fix formatting of empty signature payload
[%a:]
(#1236, @emillon) - Fix parenthesizing when accessing field of construct application (#1247, @gpetiot)
- Fix formatting of attributes on object overrides
{< >}
(#1238, @emillon) - Fix attributes on coercion (#1239, @emillon)
- Fix formatting of attributes on packed modules (#1243, @emillon)
- Fix parens around binop operations with attributes (#1252, #1306, @gpetiot, @CraigFe)
- Remove unecessary parentheses in the argument of indexing operators (#1280, @Julow)
- Retain attributes on various AST nodes:
- field set expressions, e.g.
(a.x <- b) [@a]
(#1284, @CraigFe) - instance variable set expressions, e.g.
(a <- b) [@a]
(#1288, @CraigFe) - indexing operators, e.g.
(a.(b)) [@a]
(#1300, @CraigFe) - sequences, e.g.
(a; b) [@a]
(#1291, @CraigFe)
- field set expressions, e.g.
- Avoid unnecessary spacing after object types inside records and polymorphic variants, e.g.
{foo : < .. > [@a]}
and{ foo : < .. > }
(#1296, @CraigFe) - Fix missing parentheses around tuples with attributes. (#1301, @CraigFe).
Previously,
f ((0, 0) [@a])
would be formatted tof (0, 0) [@a]
, crashing OCamlformat. - Avoid emitting
>]
when an object type is contained in an extension point or attribute payload (#1298, @CraigFe) - Fix crash on the expression
(0).*(0)
(#1304, @Julow). It was formatting to0.*(0)
which parses as an other expression. - Preserve empty doc-comments syntax. (#1311, @gpetiot).
Previously
(**)
would be formatted to(***)
. - Do not crash when a comment contains just a newline (#1290, @emillon)
- Handle lazy patterns as arguments to
class
(#1289, @emillon) - Preserve cinaps comments containing unparsable code (#1303, @Julow). Previously, OCamlformat would fallback to the "wrapping" logic, making the comment unreadable and crashing in some cases.
- Fix normalization of attributes, fixing the docstrings in attributes (#1314, @gpetiot)
- Add missing parentheses around OR-patterns with attributes (#1317, @gpetiot)
- Fix spacing inside parens for symbols when the spacing was handled by the englobing exp (#1316, @gpetiot)
- Fix invalid (unparsable) docstrings (#1315, @gpetiot). When parsing a comment raises an error in odoc, it is printed as-is.
- Fix parenthesizing of optional arguments rebound to non-variables, e.g.
let f ?a:(A) = ()
rather than the unparsablelet f ?a:A = ()
(#1305, @CraigFe)