@@ -2348,15 +2348,13 @@ and print_expression =
23482348 print_ident(txt),
23492349 ] )
23502350 | PExpRecordSet (expression , {txt, _ }, expression2 ) =>
2351- Doc . concat([
2352- print_expression(~original_source, ~comments, expression),
2353- Doc . dot,
2354- print_ident(txt),
2355- Doc . space,
2356- Doc . equal,
2357- Doc . space,
2358- print_expression(~original_source, ~comments, expression2),
2359- ] )
2351+ let left =
2352+ Doc . concat([
2353+ print_expression(~original_source, ~comments, expression),
2354+ Doc . dot,
2355+ print_ident(txt),
2356+ ] );
2357+ print_assignment(~original_source, ~comments, left, expression2);
23602358 | PExpMatch (expression , match_branches ) =>
23612359 let arg =
23622360 Doc . concat([
@@ -3100,97 +3098,92 @@ and print_expression =
31003098 print_expression(~original_source, ~comments, expression1),
31013099 ] )
31023100 | PExpAssign (expression , expression1 ) =>
3103- switch (expression1. pexp_desc) {
3104- | PExpApp (func , expressions ) =>
3105- let function_name = get_function_name(func);
3106-
3107- let trimmed_operator = String . trim(function_name);
3101+ let left = print_expression(~original_source, ~comments, expression);
3102+ print_assignment(~original_source, ~comments, left, expression1);
3103+ | /** Used for modules without body expressions */ PExpNull => Doc . nil
3104+ };
31083105
3109- let left = print_expression(~original_source, ~comments, expression);
3106+ expression_doc;
3107+ }
3108+ and print_assignment = (~original_source, ~comments, left, value) => {
3109+ switch (value. pexp_desc) {
3110+ | PExpApp (func , expressions ) =>
3111+ let function_name = get_function_name(func);
31103112
3111- let left_matches_first =
3112- switch (expressions) {
3113- | [ expr , ... remainder ] =>
3114- print_expression(~original_source, ~comments, expr) == left
3115- | _ => false
3116- };
3113+ let trimmed_operator = String . trim(function_name);
31173114
3118- if (left_matches_first) {
3119- // +=, -=, *=, /=, and %=
3120- switch (trimmed_operator) {
3121- | "+"
3122- | "-"
3123- | "*"
3124- | "/"
3125- | "% " =>
3126- let sugared_op = Doc . text(" " ++ trimmed_operator ++ "= " );
3127- Doc . concat([
3128- print_expression(~original_source, ~comments, expression),
3129- sugared_op,
3130- switch (expressions) {
3131- | [] =>
3132- raise (
3133- IllegalParse ("Sugared op needs at least one expression" ),
3134- )
3135- | [ expression ] =>
3136- let expr =
3137- print_expression(~original_source, ~comments, expression);
3138- switch (expression. pexp_desc) {
3139- | PExpIf (_ ) =>
3140- Doc . indent(
3141- print_expression(~original_source, ~comments, expression),
3142- )
3143- | _ => expr
3144- };
3145- | [ expression1 , expression2 , ... rest ] =>
3146- let expr =
3147- print_expression(~original_source, ~comments, expression2);
3148- switch (expression2. pexp_desc) {
3149- | PExpIf (_ ) =>
3150- Doc . indent(
3151- print_expression(
3152- ~original_source,
3153- ~comments,
3154- expression2,
3155- ),
3156- )
3157- | _ => expr
3158- };
3159- },
3160- ] );
3161- | _ =>
3162- Doc . concat([
3163- print_expression(~original_source, ~comments, expression),
3164- Doc . space,
3165- Doc . equal,
3166- Doc . space,
3167- print_expression(~original_source, ~comments, expression1),
3168- ] )
3169- };
3170- } else {
3171- Doc . concat([
3172- print_expression(~original_source, ~comments, expression),
3173- Doc . space,
3174- Doc . equal,
3175- Doc . space,
3176- print_expression(~original_source, ~comments, expression1),
3177- ] );
3178- };
3115+ let left_matches_first =
3116+ switch (expressions) {
3117+ | [ expr , ... remainder ] =>
3118+ print_expression(~original_source, ~comments, expr) == left
3119+ | _ => false
3120+ };
31793121
3122+ if (left_matches_first) {
3123+ // +=, -=, *=, /=, and %=
3124+ switch (trimmed_operator) {
3125+ | "+"
3126+ | "-"
3127+ | "*"
3128+ | "/"
3129+ | "% " =>
3130+ let sugared_op = Doc . text(" " ++ trimmed_operator ++ "= " );
3131+ Doc . concat([
3132+ left,
3133+ sugared_op,
3134+ switch (expressions) {
3135+ | [] =>
3136+ raise (IllegalParse ("Sugared op needs at least one expression" ))
3137+ | [ expression ] =>
3138+ let expr =
3139+ print_expression(~original_source, ~comments, expression);
3140+ switch (expression. pexp_desc) {
3141+ | PExpIf (_ ) =>
3142+ Doc . indent(
3143+ print_expression(~original_source, ~comments, expression),
3144+ )
3145+ | _ => expr
3146+ };
3147+ | [ expression1 , expression2 , ... rest ] =>
3148+ let expr =
3149+ print_expression(~original_source, ~comments, expression2);
3150+ switch (expression2. pexp_desc) {
3151+ | PExpIf (_ ) =>
3152+ Doc . indent(
3153+ print_expression(~original_source, ~comments, expression2),
3154+ )
3155+ | _ => expr
3156+ };
3157+ },
3158+ ] );
31803159 | _ =>
31813160 Doc . concat([
3182- print_expression(~original_source , ~comments , expression) ,
3161+ left ,
31833162 Doc . space,
31843163 Doc . equal,
31853164 Doc . space,
3186- print_expression(~original_source, ~comments, expression1 ),
3165+ print_expression(~original_source, ~comments, value ),
31873166 ] )
3188- }
3189-
3190- | /** Used for modules without body expressions */ PExpNull => Doc . nil
3167+ };
3168+ } else {
3169+ Doc . concat([
3170+ left,
3171+ Doc . space,
3172+ Doc . equal,
3173+ Doc . space,
3174+ print_expression(~original_source, ~comments, value),
3175+ ] );
31913176 };
31923177
3193- expression_doc;
3178+ | _ =>
3179+ Doc . concat([
3180+ left,
3181+ Doc . space,
3182+ Doc . equal,
3183+ Doc . space,
3184+ print_expression(~original_source, ~comments, value),
3185+ ] )
3186+ };
31943187}
31953188and print_value_bind =
31963189 (
0 commit comments