Skip to content

Commit d83c61f

Browse files
committed
Special-case the one-element record
1 parent dee565d commit d83c61f

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

src/res_printer.ml

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2807,19 +2807,19 @@ and printExpression (e : Parsetree.expression) cmtTbl =
28072807
let forceBreak =
28082808
e.pexp_loc.loc_start.pos_lnum < e.pexp_loc.loc_end.pos_lnum
28092809
in
2810-
let punningAllowed = match spreadExpr, rows with
2811-
| (None, [_]) -> false (* disallow punning for single-element records *)
2812-
| _ -> true
2813-
in
28142810
Doc.breakableGroup ~forceBreak (
28152811
Doc.concat([
28162812
Doc.lbrace;
28172813
Doc.indent (
28182814
Doc.concat [
28192815
Doc.softLine;
2820-
spread;
2821-
Doc.join ~sep:(Doc.concat [Doc.text ","; Doc.line])
2822-
(List.map (fun row -> printRecordRow row cmtTbl punningAllowed) rows)
2816+
match spreadExpr, rows with
2817+
| (None, [row]) -> printRecordRowNoPunning row cmtTbl
2818+
| _ -> Doc.concat [
2819+
spread;
2820+
Doc.join ~sep:(Doc.concat [Doc.text ","; Doc.line])
2821+
(List.map (fun row -> printRecordRow row cmtTbl) rows)
2822+
]
28232823
]
28242824
);
28252825
Doc.trailingComma;
@@ -4822,19 +4822,15 @@ and printDirectionFlag flag = match flag with
48224822
| Asttypes.Downto -> Doc.text " downto "
48234823
| Asttypes.Upto -> Doc.text " to "
48244824

4825-
and printRecordRow (lbl, expr) cmtTbl punningAllowed =
4825+
and printRecordRowPunned (lbl, expr) cmtTbl =
4826+
let cmtLoc = {lbl.Asttypes.loc with loc_end = expr.Parsetree.pexp_loc.loc_end} in
4827+
let doc = Doc.group (printLidentPath lbl cmtTbl) in
4828+
printComments doc cmtTbl cmtLoc
4829+
4830+
and printRecordRowNoPunning (lbl, expr) cmtTbl =
48264831
let cmtLoc = {lbl.loc with loc_end = expr.pexp_loc.loc_end} in
48274832
let doc = Doc.group (
4828-
match expr.pexp_desc with
4829-
| Pexp_ident({txt = Lident key; loc = keyLoc}) when (
4830-
punningAllowed &&
4831-
Longident.last lbl.txt = key &&
4832-
lbl.loc.loc_start.pos_cnum == keyLoc.loc_start.pos_cnum
4833-
) ->
4834-
(* print punned field *)
4835-
printLidentPath lbl cmtTbl;
4836-
| _ ->
4837-
Doc.concat [
4833+
Doc.concat [
48384834
printLidentPath lbl cmtTbl;
48394835
Doc.text ": ";
48404836
(let doc = printExpressionWithComments expr cmtTbl in
@@ -4846,6 +4842,14 @@ and printRecordRow (lbl, expr) cmtTbl punningAllowed =
48464842
) in
48474843
printComments doc cmtTbl cmtLoc
48484844

4845+
and printRecordRow (lbl, expr) cmtTbl =
4846+
match expr.pexp_desc with
4847+
| Pexp_ident({txt = Lident key; loc = keyLoc}) when (
4848+
Longident.last lbl.txt = key &&
4849+
lbl.loc.loc_start.pos_cnum == keyLoc.loc_start.pos_cnum
4850+
) -> printRecordRowPunned (lbl, expr) cmtTbl;
4851+
| _ -> printRecordRowNoPunning (lbl, expr) cmtTbl
4852+
48494853
and printBsObjectRow (lbl, expr) cmtTbl =
48504854
let cmtLoc = {lbl.loc with loc_end = expr.pexp_loc.loc_end} in
48514855
let lblDoc =

0 commit comments

Comments
 (0)