@@ -2807,6 +2807,10 @@ 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
28102814 Doc. breakableGroup ~force Break (
28112815 Doc. concat([
28122816 Doc. lbrace;
@@ -2815,7 +2819,7 @@ and printExpression (e : Parsetree.expression) cmtTbl =
28152819 Doc. softLine;
28162820 spread;
28172821 Doc. join ~sep: (Doc. concat [Doc. text " ," ; Doc. line])
2818- (List. map (fun row -> printRecordRow row cmtTbl) rows)
2822+ (List. map (fun row -> printRecordRow row cmtTbl punningAllowed ) rows)
28192823 ]
28202824 );
28212825 Doc. trailingComma;
@@ -4818,17 +4822,28 @@ and printDirectionFlag flag = match flag with
48184822 | Asttypes. Downto -> Doc. text " downto "
48194823 | Asttypes. Upto -> Doc. text " to "
48204824
4821- and printRecordRow (lbl , expr ) cmtTbl =
4825+ and printRecordRow (lbl , expr ) cmtTbl punningAllowed =
48224826 let cmtLoc = {lbl.loc with loc_end = expr.pexp_loc.loc_end} in
4823- let doc = Doc. group (Doc. concat [
4824- printLidentPath lbl cmtTbl;
4825- Doc. text " : " ;
4826- (let doc = printExpressionWithComments expr cmtTbl in
4827- match Parens. expr expr with
4828- | Parens. Parenthesized -> addParens doc
4829- | Braced braces -> printBraces doc expr braces
4830- | Nothing -> doc);
4831- ]) in
4827+ 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 [
4838+ printLidentPath lbl cmtTbl;
4839+ Doc. text " : " ;
4840+ (let doc = printExpressionWithComments expr cmtTbl in
4841+ match Parens. expr expr with
4842+ | Parens. Parenthesized -> addParens doc
4843+ | Braced braces -> printBraces doc expr braces
4844+ | Nothing -> doc);
4845+ ]
4846+ ) in
48324847 printComments doc cmtTbl cmtLoc
48334848
48344849and printBsObjectRow (lbl , expr ) cmtTbl =
0 commit comments