Skip to content

0.14.0

Compare
Choose a tag to compare
@Julow Julow released this 02 Apr 14:56
· 874 commits to main since this release

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 and module 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 on val and external only.
    It is set to after by default.

  • The default for doc-comments is changed from after to before (#1012, #1325) (Jules Aguillon)
    This affects both conventional (default) and ocamlformat profiles.

  • Some options are now deprecated:

    • doc-comments (#1293, #1012)
      This option depends on a flawed heuristic.
      It is replaced by doc-comments-val for val and external declarations.
      There is no equivalent to this option in the general case.
    • escape-chars, escape-strings and extension-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 to M.f M.(x) [@attr], which would crash OCamlformat

  • Remove unecessary parentheses with attributes in some structure items:

    • extensions and eval items (#1230) (Jules Aguillon)
      eg. the expression [%ext (() [@attr])] or the structure item (() [@attr]) ;;
    • let _ = ... constructs (#1244) (Etienne Millon)
  • Fix some bugs related to comments:

    • after a function on the rhs of an infix (#1231) (Jules Aguillon)
      eg. the comment in (x >>= fun y -> y (* A *)) would be dropped
    • in module unpack (#1309) (Jules Aguillon)
      eg. in the module expression module M = (val x : S (* A *))
  • 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:

    • field set expressions, e.g. (a.x <- b) [@a] (#1284) (Craig Ferguson)
    • instance variable set expressions, e.g. (a <- b) [@a] (#1288) (Craig Ferguson)
    • indexing operators, e.g. (a.(b)) [@a] (#1300) (Craig Ferguson)
    • sequences, e.g. (a; b) [@a] (#1291) (Craig Ferguson)
  • 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 to f (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 to 0.*(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 unparsable let f ?a:A = () (#1305) (Craig Ferguson)