Add the doc-comments-val option#1012
Conversation
959aef8 to
e429a80
Compare
|
Adding my (underqualified) opinions given offline:
Also worth noting that this does nothing to resolve the variants issue highlighted by @Julow here, since that's an OCaml parser problem. |
| inherit a | ||
|
|
||
| (** Val *) | ||
| val x = 1 |
There was a problem hiding this comment.
This is intended, after-val is about signatures and not implementations.
However, placing comments after vals and methods in class types would make sense.
There was a problem hiding this comment.
I implemented that on every class type fields, including inherit and constraint, since they should always be on a single line. What do you think ?
|
Having 2 options makes sense to me, to avoid having weird option values like I have a question though, why is this new behavior applied to It seems like it is only applied for toplevel/module values, and not for class values, is this intended? |
|
The current
This new value removes these special cases while still placing comments after |
|
What should we do with this ? |
|
I'm just not convinced with the name, maybe |
|
I don't like |
f11e2d1 to
a3bb19c
Compare
|
Just rebased. |
|
If replacing |
|
The reason for this new value is because An alternative would be to deprecate |
This sounds better indeed, as long as there is no regression for the |
58255d3 to
02a8d72
Compare
|
I changed to keep Only the |
How does the diff look like? Docstrings for big elements should already be before. |
|
The diff is huge on infer, mainly because of doc comments on types. |
02a8d72 to
a985f9b
Compare
|
We can avoid going through a deprecation step if
but printing a custom message when this option is parsed would be useful for the user |
a985f9b to
45d866b
Compare
|
I rebased and cleaned the history a bit. There quite a bit of changes with test_branch but they all are expected. |
gpetiot
left a comment
There was a problem hiding this comment.
It looks much better now, thanks. ocamlformat-help.txt has not been completely updated though (with the new doc-comments doc).
381053c to
2c58f42
Compare
CHANGES: #### New features + Add an option `--format-invalid-files` to print unparsable parts of the input as verbatim text. This feature is still experimental. (ocaml-ppx/ocamlformat#1026) (Guillaume Petiot) + Support multi-indices extended indexing operators (ocaml-ppx/ocamlformat#1279, ocaml-ppx/ocamlformat#1277) (Jules Aguillon, Guillaume Petiot) This feature has been added in OCaml 4.10.0 + Handle OCaml 4.10.0 AST (ocaml-ppx/ocamlformat#1276) (Guillaume Petiot) + Preserve functor syntax for consistency (ocaml-ppx/ocamlformat#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` (ocaml-ppx/ocamlformat#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` (ocaml-ppx/ocamlformat#1012, ocaml-ppx/ocamlformat#1325) (Jules Aguillon) This affects both `conventional` (default) and `ocamlformat` profiles. + Some options are now deprecated: * `doc-comments` (ocaml-ppx/ocamlformat#1293, ocaml-ppx/ocamlformat#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` (ocaml-ppx/ocamlformat#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. (ocaml-ppx/ocamlformat#1299) (Craig Ferguson) #### Bug fixes + Fix missing parentheses around `let open` (ocaml-ppx/ocamlformat#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 (ocaml-ppx/ocamlformat#1230) (Jules Aguillon) eg. the expression `[%ext (() [@attr])]` or the structure item `(() [@attr]) ;;` * `let _ = ...` constructs (ocaml-ppx/ocamlformat#1244) (Etienne Millon) + Fix some bugs related to comments: * after a function on the rhs of an infix (ocaml-ppx/ocamlformat#1231) (Jules Aguillon) eg. the comment in `(x >>= fun y -> y (* A *))` would be dropped * in module unpack (ocaml-ppx/ocamlformat#1309) (Jules Aguillon) eg. in the module expression `module M = (val x : S (* A *))` + Fix formatting of empty signature payload `[%a:]` (ocaml-ppx/ocamlformat#1236) (Etienne Millon) + Fix parenthesizing when accessing field of construct application (ocaml-ppx/ocamlformat#1247) (Guillaume Petiot) + Fix formatting of attributes on object overrides `{< >}` (ocaml-ppx/ocamlformat#1238) (Etienne Millon) + Fix attributes on coercion (ocaml-ppx/ocamlformat#1239) (Etienne Millon) + Fix formatting of attributes on packed modules (ocaml-ppx/ocamlformat#1243) (Etienne Millon) + Fix parens around binop operations with attributes (ocaml-ppx/ocamlformat#1252, ocaml-ppx/ocamlformat#1306) (Guillaume Petiot, Craig Ferguson) + Remove unecessary parentheses in the argument of indexing operators (ocaml-ppx/ocamlformat#1280) (Jules Aguillon) + Retain attributes on various AST nodes: * field set expressions, e.g. `(a.x <- b) [@A]` (ocaml-ppx/ocamlformat#1284) (Craig Ferguson) * instance variable set expressions, e.g. `(a <- b) [@A]` (ocaml-ppx/ocamlformat#1288) (Craig Ferguson) * indexing operators, e.g. `(a.(b)) [@A]` (ocaml-ppx/ocamlformat#1300) (Craig Ferguson) * sequences, e.g. `(a; b) [@A]` (ocaml-ppx/ocamlformat#1291) (Craig Ferguson) + Avoid unnecessary spacing after object types inside records and polymorphic variants, e.g. `{foo : < .. > [@A]}` and `{ foo : < .. > }` (ocaml-ppx/ocamlformat#1296) (Craig Ferguson) + Fix missing parentheses around tuples with attributes. (ocaml-ppx/ocamlformat#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 (ocaml-ppx/ocamlformat#1298) (Craig Ferguson) + Fix crash on the expression `(0).*(0)` (ocaml-ppx/ocamlformat#1304) (Jules Aguillon) It was formatting to `0.*(0)` which parses as an other expression. + Preserve empty doc-comments syntax. (ocaml-ppx/ocamlformat#1311) (Guillaume Petiot) Previously `(**)` would be formatted to `(***)`. + Do not crash when a comment contains just a newline (ocaml-ppx/ocamlformat#1290) (Etienne Millon) + Handle lazy patterns as arguments to `class` (ocaml-ppx/ocamlformat#1289) (Etienne Millon) + Preserve cinaps comments containing unparsable code (ocaml-ppx/ocamlformat#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 (ocaml-ppx/ocamlformat#1314) (Guillaume Petiot) + Add missing parentheses around OR-patterns with attributes (ocaml-ppx/ocamlformat#1317) (Guillaume Petiot) + Fix spacing inside parens for symbols when the spacing was handled by the englobing exp (ocaml-ppx/ocamlformat#1316) (Guillaume Petiot) + Fix invalid (unparsable) docstrings (ocaml-ppx/ocamlformat#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 = ()` (ocaml-ppx/ocamlformat#1305) (Craig Ferguson)
CHANGES: #### Changes + The default for `doc-comments` is changed to `after` (ocaml-ppx/ocamlformat#1335) (Jules Aguillon) This reverts a change introduced in 0.14.0 (ocaml-ppx/ocamlformat#1012). + Revert deprecation of the `doc-comments` option (ocaml-ppx/ocamlformat#1331) (Jules Aguillon) This reverts a change introduced in 0.14.0 (ocaml-ppx/ocamlformat#1293).
Partial fix to #1010
Adddoc-comments=after-valthat is likeafterforvals andexternals and likebeforefor other items.Edit: This PR adds
doc-comments-val=before|afterto control placement of doc comments onvalandexternalonly.This removes the inconsistency caused by the
is_simpleheuristic on modules and classes or by the attachments of doc comments on constructor by OCaml's parser:This is added to the
conventionalprofile.