From 3124f3de70ce0b1d947c5768eb266e4835ec6487 Mon Sep 17 00:00:00 2001 From: nojaf Date: Sat, 26 Sep 2020 20:10:35 +0200 Subject: [PATCH] Format function calls with multiple lambdas as multiline. Fixes #1164. --- src/Fantomas.Tests/LambdaTests.fs | 41 +++++++++++++++++++++++++++++++ src/Fantomas/CodePrinter.fs | 9 ++++--- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/Fantomas.Tests/LambdaTests.fs b/src/Fantomas.Tests/LambdaTests.fs index 00017155a3..a5f3ee4879 100644 --- a/src/Fantomas.Tests/LambdaTests.fs +++ b/src/Fantomas.Tests/LambdaTests.fs @@ -472,3 +472,44 @@ Target.create "Install" (fun x -> // Paket restore will already happen when the build.fsx dependencies are restored ) """ + +[] +let ``function call with two lambda arguments, 1164`` () = + formatSourceString false """ +let init = + addDateTimeConverter + (fun dt -> Date(dt.Year, dt.Month, dt.Day)) + (fun (Date (y, m, d)) -> + System.DateTime(y, m, d)) +""" { config with MaxLineLength = 85 } + |> prepend newline + |> should equal """ +let init = + addDateTimeConverter + (fun dt -> Date(dt.Year, dt.Month, dt.Day)) + (fun (Date (y, m, d)) -> System.DateTime(y, m, d)) +""" + +[] +let ``function call with two lambdas and three other arguments`` () = + formatSourceString false """ +SettingControls.toggleButton (fun _ -> + UpdateOption(key, MultilineFormatterTypeOption(o, key, "character_width")) + |> dispatch) (fun _ -> + UpdateOption(key, MultilineFormatterTypeOption(o, key, "number_of_items")) + |> dispatch) "CharacterWidth" "NumberOfItems" key (v = "character_width") +""" config + |> prepend newline + |> should equal """ +SettingControls.toggleButton + (fun _ -> + UpdateOption(key, MultilineFormatterTypeOption(o, key, "character_width")) + |> dispatch) + (fun _ -> + UpdateOption(key, MultilineFormatterTypeOption(o, key, "number_of_items")) + |> dispatch) + "CharacterWidth" + "NumberOfItems" + key + (v = "character_width") +""" diff --git a/src/Fantomas/CodePrinter.fs b/src/Fantomas/CodePrinter.fs index 6aca1be171..9dc83db418 100644 --- a/src/Fantomas/CodePrinter.fs +++ b/src/Fantomas/CodePrinter.fs @@ -1966,12 +1966,13 @@ and genExpr astContext synExpr = +> genExpr astContext e +> unindent)))) - let hasThreeOrMoreLambdas = + let hasMultipleLambdas = List.filter (function - | Paren (_, Lambda _, _) -> true + | Paren (_, Lambda _, _) + | Paren (_, DesugaredLambda _, _) -> true | _ -> false) es |> List.length - |> fun l -> l >= 3 + |> fun l -> l > 1 if List.exists (function | Lambda _ @@ -1981,7 +1982,7 @@ and genExpr astContext synExpr = | MultilineString _ | CompExpr _ -> true | _ -> false) es - && not hasThreeOrMoreLambdas then + && not hasMultipleLambdas then shortExpression else expressionFitsOnRestOfLine shortExpression longExpression