Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bug one
(), ~x:(fun y -> y)
was being misformatted as(), ~x:fun y -> y
, which doesn't parse. I thought this was avoided by the precedence changes in the original labeled tuples PR, but I was wrong.Now that I've added similar logic and tests to labeled tuple patterns and expressions to make parenthesization coherent, you might ask whether I should pre-emptively do it for types. I believe this isn't needed because labeled tuple type elements use the same non-terminal as normal tuple type elements (
atomic_type
, see here). On the other hand, when parsing patterns and expressions, a different parser is used for the labeled and unlabeled cases (pattern
vssimple_pattern
, andexpr
vssimple_expr
).Bug two
unit -> local_ (x:int * y:bool)
was being misformatted asunit -> local_ x:int * y:bool
, which doesn't parse.The parens are needed only if the return is
local_
and the tuple's first element is labeled. This is a limitation in the parser. The way ocamlformat handleslocal_
makes the location of the fix awkward, but ultimately fairly understandable. Hopefully one day we'll rework thelocal_
printing.