@@ -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 ~force Break (
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+
48494853and printBsObjectRow (lbl , expr ) cmtTbl =
48504854 let cmtLoc = {lbl.loc with loc_end = expr.pexp_loc.loc_end} in
48514855 let lblDoc =
0 commit comments