0.14.0
CHANGES:
New features
-
Add an option
--format-invalid-files
to print unparsable parts of the input as verbatim text. This feature is still experimental. (#1026) (Guillaume Petiot) -
Support multi-indices extended indexing operators (#1279, #1277) (Jules Aguillon, Guillaume Petiot)
This feature has been added in OCaml 4.10.0 -
Handle OCaml 4.10.0 AST (#1276) (Guillaume Petiot)
-
Preserve functor syntax for consistency (#1312) (Guillaume Petiot)
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) (Jules Aguillon)
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) (Jules Aguillon)
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) (Craig Ferguson)
Bug fixes
-
Fix missing parentheses around
let open
(#1229) (Jules Aguillon)
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:
-
Fix some bugs related to comments:
-
Fix formatting of empty signature payload
[%a:]
(#1236) (Etienne Millon) -
Fix parenthesizing when accessing field of construct application (#1247) (Guillaume Petiot)
-
Fix formatting of attributes on object overrides
{< >}
(#1238) (Etienne
Millon) -
Fix attributes on coercion (#1239) (Etienne Millon)
-
Fix formatting of attributes on packed modules (#1243) (Etienne Millon)
-
Fix parens around binop operations with attributes (#1252, #1306) (Guillaume Petiot, Craig Ferguson)
-
Remove unecessary parentheses in the argument of indexing operators (#1280) (Jules Aguillon)
-
Retain attributes on various AST nodes:
-
Avoid unnecessary spacing after object types inside records and polymorphic variants,
e.g.{foo : < .. > [@a]}
and{ foo : < .. > }
(#1296) (Craig Ferguson) -
Fix missing parentheses around tuples with attributes. (#1301) (Craig Ferguson)
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) (Craig Ferguson) -
Fix crash on the expression
(0).*(0)
(#1304) (Jules Aguillon)
It was formatting to0.*(0)
which parses as an other expression. -
Preserve empty doc-comments syntax. (#1311) (Guillaume Petiot)
Previously(**)
would be formatted to(***)
. -
Do not crash when a comment contains just a newline (#1290) (Etienne Millon)
-
Handle lazy patterns as arguments to
class
(#1289) (Etienne Millon) -
Preserve cinaps comments containing unparsable code (#1303) (Jules Aguillon)
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) (Guillaume Petiot)
-
Add missing parentheses around OR-patterns with attributes (#1317) (Guillaume Petiot)
-
Fix spacing inside parens for symbols when the spacing was handled by the englobing exp (#1316) (Guillaume Petiot)
-
Fix invalid (unparsable) docstrings (#1315) (Guillaume Petiot)
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) (Craig Ferguson)