Skip to content

Commit 1853f0d

Browse files
Fix bad indentation of let%ext { ... (#2663)
1 parent 90f0892 commit 1853f0d

File tree

9 files changed

+229
-2
lines changed

9 files changed

+229
-2
lines changed

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ profile. This started with version 0.26.0.
2525
- Fix missing parentheses in `let+ (Cstr _) : _ = _` (#2661, @Julow)
2626
This caused a crash as the generated code wasn't valid syntax.
2727

28+
- Fix bad indentation of `let%ext { ...` (#2663, @EmileTrotignon)
29+
with `dock-collection-brackets` enabled.
30+
2831
## 0.27.0
2932

3033
### Highlight

lib/Fmt_ast.ml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4619,7 +4619,14 @@ and fmt_value_binding c ~ctx0 ~rec_flag ?in_ ?epi
46194619
in
46204620
let ext = lb_attrs.attrs_extension in
46214621
let should_break_after_keyword =
4622-
Cmts.has_before c.cmts lb_pat.ast.ppat_loc || Option.is_some ext
4622+
Cmts.has_before c.cmts lb_pat.ast.ppat_loc
4623+
|| Option.is_some ext
4624+
&&
4625+
match lb_pat.ast with
4626+
| {ppat_desc= Ppat_record _ | Ppat_list _ | Ppat_array _; _}
4627+
when c.conf.fmt_opts.dock_collection_brackets.v ->
4628+
false
4629+
| _ -> true
46234630
in
46244631
let decl =
46254632
let decl =

lib/Params.ml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,16 @@ let box_pattern_docked (c : Conf.t) ~ctx ~space_around ~pat opn cls k =
689689
| Ast.Exp {pexp_desc= Pexp_let ({pvbs_bindings; _}, _, _); _}, _
690690
when List.exists pvbs_bindings ~f:(fun b -> phys_equal b.pvb_pat pat)
691691
->
692-
(-4, 0)
692+
let ext_length =
693+
let binding =
694+
List.find_exn pvbs_bindings ~f:(fun b ->
695+
phys_equal b.pvb_pat pat )
696+
in
697+
binding.pvb_attributes.attrs_extension
698+
|> Option.map ~f:(fun ext -> ext.txt |> String.length |> ( + ) 1)
699+
|> Option.value ~default:0
700+
in
701+
(-4 - ext_length, 0)
693702
| _ -> (0, 0)
694703
in
695704
hvbox indent_opn

test/passing/gen/dune.inc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2765,6 +2765,24 @@
27652765
(package ocamlformat)
27662766
(action (diff issue1750.ml.err issue1750.ml.stderr)))
27672767

2768+
(rule
2769+
(deps .ocamlformat)
2770+
(package ocamlformat)
2771+
(action
2772+
(with-stdout-to issue2660.ml.stdout
2773+
(with-stderr-to issue2660.ml.stderr
2774+
(run %{bin:ocamlformat} --name issue2660.ml --margin-check --profile=default --max-indent=2 %{dep:../tests/issue2660.ml})))))
2775+
2776+
(rule
2777+
(alias runtest)
2778+
(package ocamlformat)
2779+
(action (diff issue2660.ml.ref issue2660.ml.stdout)))
2780+
2781+
(rule
2782+
(alias runtest)
2783+
(package ocamlformat)
2784+
(action (diff issue2660.ml.err issue2660.ml.stderr)))
2785+
27682786
(rule
27692787
(deps .ocamlformat)
27702788
(package ocamlformat)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let v =
2+
let%bind {
3+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
4+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
5+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
6+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
7+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
8+
} =
9+
4
10+
in
11+
4
12+
13+
let v =
14+
let {
15+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
16+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
17+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
18+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
19+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
20+
} =
21+
4
22+
in
23+
4
24+
25+
let v =
26+
let%bind [
27+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
28+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
29+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
30+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
31+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
32+
] =
33+
4
34+
in
35+
4
36+
37+
let v =
38+
let [
39+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
40+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
41+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
42+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
43+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
44+
] =
45+
4
46+
in
47+
4
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let v =
2+
let%bind {
3+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
4+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
5+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
6+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
7+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
8+
} =
9+
4
10+
in
11+
4
12+
13+
let v =
14+
let {
15+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
16+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
17+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
18+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
19+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
20+
} =
21+
4
22+
in
23+
4
24+
25+
let v =
26+
let%bind [
27+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
28+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
29+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
30+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
31+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
32+
] =
33+
4
34+
in
35+
4
36+
37+
let v =
38+
let [
39+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
40+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
41+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
42+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
43+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
44+
] =
45+
4
46+
in
47+
4
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let v =
2+
let%bind {
3+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
4+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
5+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
6+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
7+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
8+
} =
9+
4
10+
in
11+
4
12+
13+
let v =
14+
let {
15+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
16+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
17+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
18+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
19+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
20+
} =
21+
4
22+
in
23+
4
24+
25+
let v =
26+
let%bind [
27+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
28+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
29+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
30+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
31+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
32+
] =
33+
4
34+
in
35+
4
36+
37+
let v =
38+
let [
39+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
40+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
41+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
42+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
43+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
44+
] =
45+
4
46+
in
47+
4

test/passing/tests/issue2660.ml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let v =
2+
let%bind {
3+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
4+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
5+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
6+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
7+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
8+
} =
9+
4
10+
in
11+
4
12+
13+
let v =
14+
let {
15+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
16+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
17+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
18+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
19+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
20+
} =
21+
4
22+
in
23+
4
24+
25+
let v =
26+
let%bind [
27+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
28+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
29+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
30+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
31+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
32+
] =
33+
4
34+
in
35+
4
36+
37+
let v =
38+
let [
39+
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
40+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
41+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
42+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
43+
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
44+
] =
45+
4
46+
in
47+
4

test/passing/tests/issue2660.ml.opts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
--profile=default
2+
--max-indent=2

0 commit comments

Comments
 (0)