OCamlFormat 0.14.0
See full changelog
New features
- Add an option
--format-invalid-filesto 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 endandmodule M (K : S) = struct endwould 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 onvalandexternalonly. It is set toafterby default. - The default for
doc-commentsis changed fromaftertobefore(#1012, #1325, @Julow). This affects bothconventional(default) andocamlformatprofiles. - Some options are now deprecated:
doc-comments(#1293, #1012). This option depends on a flawed heuristic. It is replaced bydoc-comments-valforvalandexternaldeclarations. There is no equivalent to this option in the general case.escape-chars,escape-stringsandextension-sugar(#1293). These options are rarely used and their default behavior is considered to be the right behavior.
- Add space between
row_fieldattributes 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)