Skip to content

Commit

Permalink
nest-match=align now works with match%ext.
Browse files Browse the repository at this point in the history
  • Loading branch information
EmileTrotignon committed Feb 3, 2025
1 parent 4c94d48 commit 2a4f12c
Show file tree
Hide file tree
Showing 5 changed files with 232 additions and 2 deletions.
16 changes: 14 additions & 2 deletions lib/Params.ml
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ let get_or_pattern_is_nested ~ctx pat =
not
(List.exists bindings.pvbs_bindings ~f:(function
| {pvb_body= Pfunction_cases (cases, _, _); _} -> check_cases cases
| _ -> false ))
| _ -> false ) )
| _ -> true

let get_or_pattern_sep ?(cmts_before = false) ?(space = false) (c : Conf.t)
Expand Down Expand Up @@ -432,6 +432,17 @@ let get_cases (c : Conf.t) ~ctx ~first ~last ~cmts_before
let align_nested_match =
match (ast.pexp_desc, c.fmt_opts.nested_match.v) with
| (Pexp_match _ | Pexp_try _), `Align -> last
| ( Pexp_extension
( ext
, PStr
[ { pstr_loc= _
; pstr_desc=
Pstr_eval
({pexp_desc= Pexp_match _ | Pexp_try _; pexp_loc; _}, _)
} ] )
, `Align )
when Source.extension_using_sugar ~name:ext ~payload:pexp_loc ->
last
| _ -> false
in
let body_has_parens =
Expand Down Expand Up @@ -930,7 +941,8 @@ module Align = struct

let module_pack (c : Conf.t) ~me =
if not c.fmt_opts.ocp_indent_compat.v then false
else (* Align when the constraint is not desugared. *)
else
(* Align when the constraint is not desugared. *)
match me.pmod_desc with
| Pmod_structure _ | Pmod_ident _ -> false
| _ -> true
Expand Down
48 changes: 48 additions & 0 deletions test/passing/refs.default/match.ml.ref
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,51 @@ let x =

let _ = match x with _ -> b >>= fun () -> c
let () = match () with _ -> ( fun _ : _ -> match () with _ -> ()) | _ -> ()

[@@@ocamlformat "nested-match=align"]

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
[%ext2
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa]

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa
53 changes: 53 additions & 0 deletions test/passing/refs.janestreet/match.ml.ref
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,56 @@ let () =
| _ -> ()))
| _ -> ()
;;

[@@@ocamlformat "nested-match=align"]

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa
;;

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa
;;

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa
;;

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
[%ext2
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa]
;;

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa
;;
68 changes: 68 additions & 0 deletions test/passing/refs.ocamlformat/match.ml.ref
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,71 @@ let x =
let _ = match x with _ -> b >>= fun () -> c

let () = match () with _ -> ( fun _ : _ -> match () with _ -> () ) | _ -> ()

[@@@ocamlformat "nested-match=align"]

let () =
match f x with
| _ :: _ ->
aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ ->
bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ ->
cc cccc cccc cccc cccc ccc cccccc cccc
| [] ->
ff dda asa

let () =
match%ext1 f x with
| _ :: _ ->
aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ ->
bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ ->
cc cccc cccc cccc cccc ccc cccccc cccc
| [] ->
ff dda asa

let () =
match f x with
| _ :: _ ->
aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ ->
bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ ->
cc cccc cccc cccc cccc ccc cccccc cccc
| [] ->
ff dda asa

let () =
match f x with
| _ :: _ ->
aaaaa aaaa a aa aaaaaa aaaa
| _ ->
[%ext2
match g y with
| _ :: _ :: _ :: _ ->
bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ ->
cc cccc cccc cccc cccc ccc cccccc cccc
| [] ->
ff dda asa]

let () =
match%ext1 f x with
| _ :: _ ->
aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ ->
bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ ->
cc cccc cccc cccc cccc ccc cccccc cccc
| [] ->
ff dda asa
49 changes: 49 additions & 0 deletions test/passing/tests/match.ml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,52 @@ let () =
| _ -> ())
| _ -> ()
;;

[@@@ocamlformat "nested-match=align"]

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

let () =
match f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
[%ext2
match g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa]

let () =
match%ext1 f x with
| _ :: _ -> aaaaa aaaa a aa aaaaaa aaaa
| _ ->
match%ext2 g y with
| _ :: _ :: _ :: _ -> bbb bbbbb bbbbbbb bbbb bbbb
| _ :: _ :: _ -> cc cccc cccc cccc cccc ccc cccccc cccc
| [] -> ff dda asa

0 comments on commit 2a4f12c

Please sign in to comment.