diff --git a/docs/Documentation.md b/docs/Documentation.md index 3232ea3bf3..4b7d7b8120 100644 --- a/docs/Documentation.md +++ b/docs/Documentation.md @@ -115,7 +115,7 @@ fsharp_record_multiline_formatter=character_width fsharp_max_array_or_list_width=40 fsharp_max_array_or_list_number_of_items=1 fsharp_array_or_list_multiline_formatter=character_width -fsharp_max_value_binding_width=40 +fsharp_max_value_binding_width=80 fsharp_max_function_binding_width=40 fsharp_max_dot_get_expression_width=50 fsharp_multiline_block_brackets_on_same_column=false @@ -704,8 +704,9 @@ let myArray = ### fsharp_max_value_binding_width -Control the maximum width for which let and member value bindings should be in one line. -Default = 40. +Control the maximum expression width for which let and member value/property bindings should be in one line. +The width is that of the pattern for the binding plus the implementating expression but not the keywords (e.g. "let"). +Default = 80. `defaultConfig` @@ -729,7 +730,7 @@ type MyType() = ### fsharp_max_function_binding_width -Control the maximum width for which let and member function bindings should be in one line. +Control the maximum width for which function and member bindings should be in one line. Default = 40. `defaultConfig` diff --git a/fantomas.sln b/fantomas.sln index 6b6c0e6b00..6bd611d2eb 100644 --- a/fantomas.sln +++ b/fantomas.sln @@ -1,24 +1,32 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31825.309 MinimumVisualStudioVersion = 15.0.26124.0 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{B570C54C-2FEA-4A94-A8C5-FD4157A94DE7}" ProjectSection(SolutionItems) = preProject paket.dependencies = paket.dependencies EndProjectSection EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas", "src\Fantomas\Fantomas.fsproj", "{7EA16279-A5F1-4781-A343-4375A04BCE6F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas", "src\Fantomas\Fantomas.fsproj", "{7EA16279-A5F1-4781-A343-4375A04BCE6F}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.Tests", "src\Fantomas.Tests\Fantomas.Tests.fsproj", "{DED76E41-B89F-47BA-84C5-3AB0BECFA767}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas.Tests", "src\Fantomas.Tests\Fantomas.Tests.fsproj", "{DED76E41-B89F-47BA-84C5-3AB0BECFA767}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.CoreGlobalTool", "src\Fantomas.CoreGlobalTool\Fantomas.CoreGlobalTool.fsproj", "{DC08805B-C6E2-43F3-B381-E60EE88A079D}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas.CoreGlobalTool", "src\Fantomas.CoreGlobalTool\Fantomas.CoreGlobalTool.fsproj", "{DC08805B-C6E2-43F3-B381-E60EE88A079D}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.CoreGlobalTool.Tests", "src\Fantomas.CoreGlobalTool.Tests\Fantomas.CoreGlobalTool.Tests.fsproj", "{DEDE6968-0BE8-4415-9262-8355B82AF2C0}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas.CoreGlobalTool.Tests", "src\Fantomas.CoreGlobalTool.Tests\Fantomas.CoreGlobalTool.Tests.fsproj", "{DEDE6968-0BE8-4415-9262-8355B82AF2C0}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.Benchmarks", "src\Fantomas.Benchmarks\Fantomas.Benchmarks.fsproj", "{B6BC63D5-410D-4DBB-9D45-5638F20BD09B}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas.Benchmarks", "src\Fantomas.Benchmarks\Fantomas.Benchmarks.fsproj", "{B6BC63D5-410D-4DBB-9D45-5638F20BD09B}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.Extras", "src\Fantomas.Extras\Fantomas.Extras.fsproj", "{4088FF76-1DB7-4E68-80FE-E851CE6701AC}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fantomas.Extras", "src\Fantomas.Extras\Fantomas.Extras.fsproj", "{4088FF76-1DB7-4E68-80FE-E851CE6701AC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{29F22904-C9E0-40AA-B971-9AE377C17F59}" + ProjectSection(SolutionItems) = preProject + docs\Documentation.md = docs\Documentation.md + docs\Formatting-Elmish-code.md = docs\Formatting-Elmish-code.md + docs\FormattingConventions.md = docs\FormattingConventions.md + docs\index.html = docs\index.html + EndProjectSection EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fantomas.Client", "src\Fantomas.Client\Fantomas.Client.fsproj", "{AA895F94-CCF2-4FCF-A9BB-E16987B57535}" EndProject @@ -31,9 +39,6 @@ Global Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7EA16279-A5F1-4781-A343-4375A04BCE6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EA16279-A5F1-4781-A343-4375A04BCE6F}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -120,6 +125,10 @@ Global {AA895F94-CCF2-4FCF-A9BB-E16987B57535}.Release|x86.ActiveCfg = Release|Any CPU {AA895F94-CCF2-4FCF-A9BB-E16987B57535}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection - GlobalSection(NestedProjects) = preSolution + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DEBFC920-A647-4859-890D-B59793D27594} EndGlobalSection EndGlobal diff --git a/src/Fantomas.Tests/BlankLinesAroundNestedMultilineExpressions.fs b/src/Fantomas.Tests/BlankLinesAroundNestedMultilineExpressions.fs index a39eacfbc6..1e593e9f78 100644 --- a/src/Fantomas.Tests/BlankLinesAroundNestedMultilineExpressions.fs +++ b/src/Fantomas.Tests/BlankLinesAroundNestedMultilineExpressions.fs @@ -166,11 +166,9 @@ type MNIST ?targetTransform: Tensor -> Tensor ) = inherit Dataset() - let path = - Path.Combine(path, "mnist") |> Path.GetFullPath + let path = Path.Combine(path, "mnist") |> Path.GetFullPath let train = defaultArg train true - let transform = - defaultArg transform (fun t -> (t - 0.1307) / 0.3081) + let transform = defaultArg transform (fun t -> (t - 0.1307) / 0.3081) let targetTransform = defaultArg targetTransform id let urls = List.ofSeq diff --git a/src/Fantomas.Tests/CastTests.fs b/src/Fantomas.Tests/CastTests.fs index 535b5f0583..5e08392651 100644 --- a/src/Fantomas.Tests/CastTests.fs +++ b/src/Fantomas.Tests/CastTests.fs @@ -92,14 +92,11 @@ open System.Threading.Tasks open Amazon.Runtime let waitAndUpcast (x: Task<'t>) = - let t = - x |> Async.AwaitTask |> Async.RunSynchronously - + let t = x |> Async.AwaitTask |> Async.RunSynchronously x.Result :> AmazonWebServiceResponse let waitAndUpcast (x: Task<'t>) = - let t = - x |> Async.AwaitTask |> Async.RunSynchronously + let t = x |> Async.AwaitTask |> Async.RunSynchronously x.Result :> AmazonWebServiceResponse """ @@ -131,8 +128,7 @@ open System.Threading.Tasks open Amazon.Runtime let waitAndUpcast (x: Task<'t>) = - let t = - x |> Async.AwaitTask |> Async.RunSynchronously + let t = x |> Async.AwaitTask |> Async.RunSynchronously x.Result :?> AmazonWebServiceResponse """ diff --git a/src/Fantomas.Tests/ClassTests.fs b/src/Fantomas.Tests/ClassTests.fs index 4d1e972597..b181a612d8 100644 --- a/src/Fantomas.Tests/ClassTests.fs +++ b/src/Fantomas.Tests/ClassTests.fs @@ -339,8 +339,7 @@ let ``should keep parens in class inheritance in the right place`` () = class inherit DGMLClass() - let functions = - System.Collections.Generic.Dictionary() + let functions = System.Collections.Generic.Dictionary() end """ @@ -461,7 +460,9 @@ type T() = member __.Property = "hello" let longNamedFunlongNamedFunlongNamedFunlongNamedFunlongNamedFun (x: T) = x -let longNamedClasslongNamedClasslongNamedClasslongNamedClasslongNamedClasslongNamedClass = T() + +let longNamedClasslongNamedClasslongNamedClasslongNamedClasslongNamedClasslongNamedClass = + T() System.String.Concat( "a", @@ -751,8 +752,7 @@ indent_size=2 output |> should startWith (sprintf \"Processing %s\" fileFixture.Filename) - let result = - System.IO.File.ReadAllText(fileFixture.Filename) + let result = System.IO.File.ReadAllText(fileFixture.Filename) result |> should diff --git a/src/Fantomas.Tests/CompilerDirectivesTests.fs b/src/Fantomas.Tests/CompilerDirectivesTests.fs index a1cfcffc28..a944cd42d3 100644 --- a/src/Fantomas.Tests/CompilerDirectivesTests.fs +++ b/src/Fantomas.Tests/CompilerDirectivesTests.fs @@ -2336,9 +2336,7 @@ module ReactHookExtensions = type React with [] static member useDeferred(operation: Async<'T>, dependencies: obj array) = - let (deferred, setDeferred) = - React.useState (Deferred.HasNotStartedYet) - + let (deferred, setDeferred) = React.useState (Deferred.HasNotStartedYet) let token = React.useCancellationToken () let executeOperation = diff --git a/src/Fantomas.Tests/ComputationExpressionTests.fs b/src/Fantomas.Tests/ComputationExpressionTests.fs index 5a5e1d9caf..9fb8146540 100644 --- a/src/Fantomas.Tests/ComputationExpressionTests.fs +++ b/src/Fantomas.Tests/ComputationExpressionTests.fs @@ -338,8 +338,7 @@ let tests = equal """ [] -let tests = - testList "tests" [ test "test" { Expect.equal true true "unexpected" } ] +let tests = testList "tests" [ test "test" { Expect.equal true true "unexpected" } ] """ [] @@ -1020,10 +1019,7 @@ let ``let bang + let + return in ce`` () = let getEvents () = task { let! cosmoEvents = eventStore.GetEvents EventStream AllEvents - - let events = - List.map (fun (ce: EventRead) -> ce.Data) cosmoEvents - + let events = List.map (fun (ce: EventRead) -> ce.Data) cosmoEvents return events } """ @@ -1052,10 +1048,7 @@ task { .ConfigureAwait(false) parameters.IssuerSigningKeys <- config.SigningKeys - - let user, _ = - handler.ValidateToken((token: string), parameters) - + let user, _ = handler.ValidateToken((token: string), parameters) return Ok(user.Identity.Name, collectClaims user) } """ @@ -1271,8 +1264,7 @@ let helloMachine = handleOk sayHello } let root = - freyaRouter { - resource "/hello{/name}" helloMachine } + freyaRouter { resource "/hello{/name}" helloMachine } """ config |> prepend newline @@ -1310,8 +1302,7 @@ let helloMachine = handleOk sayHello } -let root = - freyaRouter { resource "/hello{/name}" helloMachine } +let root = freyaRouter { resource "/hello{/name}" helloMachine } """ [] @@ -1332,8 +1323,7 @@ promise { |> should equal """ -let resource = - promise { return new DisposableAction(fun () -> isDisposed := true) } +let resource = promise { return new DisposableAction(fun () -> isDisposed := true) } promise { use! r = resource @@ -1745,7 +1735,7 @@ let ``don't add extra newline before do bang`` () = do! webPushClient.SendNotificationAsync(ps, payload, vapidDetails) with :? WebPushException as wpex -> log.LogError(sprintf "Couldn't send notification to %s, %A" user.UserId wpex) - do! filterSubscriptionsAndPersist + do! filterSubscriptionsAndPersistLongLongLongLongLongLongLongLongLong managementToken user.UserId subscriptions @@ -1767,14 +1757,20 @@ let sendPushNotifications = |> List.map (fun s -> task { try - let ps = - PushSubscription(s.Endpoint, s.P256DH, s.Auth) + let ps = PushSubscription(s.Endpoint, s.P256DH, s.Auth) do! webPushClient.SendNotificationAsync(ps, payload, vapidDetails) with | :? WebPushException as wpex -> log.LogError(sprintf "Couldn't send notification to %s, %A" user.UserId wpex) - do! filterSubscriptionsAndPersist managementToken user.UserId subscriptions s.Origin s.Endpoint + + do! + filterSubscriptionsAndPersistLongLongLongLongLongLongLongLongLong + managementToken + user.UserId + subscriptions + s.Origin + s.Endpoint } :> Task) |> Task.WhenAll) diff --git a/src/Fantomas.Tests/ControlStructureTests.fs b/src/Fantomas.Tests/ControlStructureTests.fs index bcc0977bc5..5692152600 100644 --- a/src/Fantomas.Tests/ControlStructureTests.fs +++ b/src/Fantomas.Tests/ControlStructureTests.fs @@ -731,8 +731,7 @@ let foldi (folder: 'State -> int -> 'T -> 'State) (state: 'State) (array: 'T []) if array.Length = 0 then state else - let folder = - OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt folder + let folder = OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt folder let mutable state: 'State = state let len = array.Length @@ -921,9 +920,7 @@ with equal """ try - let defaultTime = - (DateTime.FromFileTimeUtc 0L).ToLocalTime() - + let defaultTime = (DateTime.FromFileTimeUtc 0L).ToLocalTime() foo.CreationTime <> defaultTime with // hmm @@ -950,8 +947,7 @@ with equal """ try - let defaultTime = - (DateTime.FromFileTimeUtc 0L).ToLocalTime() + let defaultTime = (DateTime.FromFileTimeUtc 0L).ToLocalTime() foo.CreationTime <> defaultTime with @@ -1087,8 +1083,7 @@ module Foo = // blah let exists = try - let defaultTime = - (DateTime.FromFileTimeUtc 0L).ToLocalTime () + let defaultTime = (DateTime.FromFileTimeUtc 0L).ToLocalTime () foo.CreationTime <> defaultTime with diff --git a/src/Fantomas.Tests/DisableElmishTests.fs b/src/Fantomas.Tests/DisableElmishTests.fs index 65acc2751b..904e089ff4 100644 --- a/src/Fantomas.Tests/DisableElmishTests.fs +++ b/src/Fantomas.Tests/DisableElmishTests.fs @@ -22,8 +22,7 @@ let v = |> should equal """ -let v = - someFunctionHere [ parameters ] [ yetMoreParameters ] :?> _ +let v = someFunctionHere [ parameters ] [ yetMoreParameters ] :?> _ """ [] diff --git a/src/Fantomas.Tests/DotGetTests.fs b/src/Fantomas.Tests/DotGetTests.fs index 664a7d653a..0697a88f07 100644 --- a/src/Fantomas.Tests/DotGetTests.fs +++ b/src/Fantomas.Tests/DotGetTests.fs @@ -167,8 +167,7 @@ module Services = ) .Resolve | Storage.EventStore (gateway, cache) -> - let accessStrategy = - Equinox.EventStore.AccessStrategy.RollingSnapshots snapshot + let accessStrategy = Equinox.EventStore.AccessStrategy.RollingSnapshots snapshot let cacheStrategy = Equinox.EventStore.CachingStrategy.SlidingWindow(cache, TimeSpan.FromMinutes 20.) diff --git a/src/Fantomas.Tests/ElmishTests.fs b/src/Fantomas.Tests/ElmishTests.fs index a9b377616e..5cde346cd4 100644 --- a/src/Fantomas.Tests/ElmishTests.fs +++ b/src/Fantomas.Tests/ElmishTests.fs @@ -365,8 +365,7 @@ let ``div with long children but a long setting`` () = |> should equal """ -let d = - div [] [ p [] [ str "fooooooooo" ]; p [] [ str "baaaaaaaar" ] ] +let d = div [] [ p [] [ str "fooooooooo" ]; p [] [ str "baaaaaaaar" ] ] """ // here the p is 38 characters @@ -1007,8 +1006,7 @@ let private useLocationDetail (auth0 : Auth0Hook) (roles : RolesHook) id = then auth0.getAccessTokenSilently () |> Promise.bind (fun authToken -> - let url = - sprintf "%s/users/%s" Common.backendUrl (location.Creator) + let url = sprintf "%s/users/%s" Common.backendUrl (location.Creator) fetch url diff --git a/src/Fantomas.Tests/FunctionDefinitionTests.fs b/src/Fantomas.Tests/FunctionDefinitionTests.fs index 095659c28e..c9c9339ac0 100644 --- a/src/Fantomas.Tests/FunctionDefinitionTests.fs +++ b/src/Fantomas.Tests/FunctionDefinitionTests.fs @@ -627,12 +627,8 @@ module FormatCode = module FormatCode = let private format filename code config = - let checker = - Fantomas.FakeHelpers.sharedChecker.Force() - - let options = - Fantomas.FakeHelpers.createParsingOptionsFromFile filename - + let checker = Fantomas.FakeHelpers.sharedChecker.Force() + let options = Fantomas.FakeHelpers.createParsingOptionsFromFile filename let source = SourceOrigin.SourceString code CodeFormatter.FormatDocumentAsync("tmp.fsx", source, config, options, checker) @@ -668,12 +664,8 @@ module FormatCode = module FormatCode = let private format filename code config = - let checker = - Fantomas.FakeHelpers.sharedChecker.Force() - - let options = - Fantomas.FakeHelpers.createParsingOptionsFromFile filename - + let checker = Fantomas.FakeHelpers.sharedChecker.Force() + let options = Fantomas.FakeHelpers.createParsingOptionsFromFile filename let source = SourceOrigin.SourceString code CodeFormatter.FormatDocumentAsync("tmp.fsx", source, config, options, checker) @@ -978,9 +970,7 @@ module Infrastructure = #if DEBUG failwith message #else - let sentryEvent = - SentryEvent(SentryMessage message, Level = errorLevel) - + let sentryEvent = SentryEvent(SentryMessage message, Level = errorLevel) () #endif """ diff --git a/src/Fantomas.Tests/InterpolatedStringTests.fs b/src/Fantomas.Tests/InterpolatedStringTests.fs index ca3970cb6b..abcba5e9a0 100644 --- a/src/Fantomas.Tests/InterpolatedStringTests.fs +++ b/src/Fantomas.Tests/InterpolatedStringTests.fs @@ -41,8 +41,7 @@ let x = 1 let pi = 3.1414 let text = "cats" -let s = - $"I say {x} is one and %0.2f{pi} is pi and %10s{text} are dogs" +let s = $"I say {x} is one and %0.2f{pi} is pi and %10s{text} are dogs" """ [] diff --git a/src/Fantomas.Tests/KeepIndentInBranchTests.fs b/src/Fantomas.Tests/KeepIndentInBranchTests.fs index 96dc3b8e4c..3298bb5d4c 100644 --- a/src/Fantomas.Tests/KeepIndentInBranchTests.fs +++ b/src/Fantomas.Tests/KeepIndentInBranchTests.fs @@ -35,9 +35,7 @@ let foo () = 0 else - let config = - Configuration.Read "/myfolder/myfile.xml" - + let config = Configuration.Read "/myfolder/myfile.xml" let result = Process.main config otherArg if result.IsOk then 0 else -1 """ @@ -1153,8 +1151,7 @@ and [] Bar<'context, 'a> = let (bf, bv) = b if typeof<'bb> = typeof<'cb> then - let bv = - unbox> bv + let bv = unbox> bv this.InnerEquals av @@ -1443,9 +1440,7 @@ module Foo = module Foo = let main (args: _) = let fs = FileSystem() - - let ab = - ThingOne.make fs (ThingFour.defaultFoo args.Args.ThingOne) + let ab = ThingOne.make fs (ThingFour.defaultFoo args.Args.ThingOne) let thingFive = ThingFive.thingFive fs ab @@ -1456,8 +1451,7 @@ module Foo = log.LogDebug("Command line options used: {CommandLine}", args) log.LogInformation("Thing One: {ThingOne}", ThingOne.getFoo ab) - let thing, cd = - args.Thing |> Args.render loggerFactory thingFive + let thing, cd = args.Thing |> Args.render loggerFactory thingFive let skipBehaviour = if defaultArg args.Skip then @@ -1811,11 +1805,9 @@ let private parseModel (modelSrc: string) : Result = let graph = new QueryableGraph() graph.LoadFromFile(modelSrc, TurtleParser()) - let xsdPath = - Path.Combine(Directory.GetCurrentDirectory(), "Some.xsd") + let xsdPath = Path.Combine(Directory.GetCurrentDirectory(), "Some.xsd") - let ontologyPath = - Path.Combine(Directory.GetCurrentDirectory(), "Some.ttl") + let ontologyPath = Path.Combine(Directory.GetCurrentDirectory(), "Some.ttl") let ontoGraph = new OntologyGraph() FileLoader.Load(ontoGraph, ontologyPath) diff --git a/src/Fantomas.Tests/LambdaTests.fs b/src/Fantomas.Tests/LambdaTests.fs index 5f96a03b4a..f0288aa0ed 100644 --- a/src/Fantomas.Tests/LambdaTests.fs +++ b/src/Fantomas.Tests/LambdaTests.fs @@ -519,15 +519,10 @@ let private tokenizeLines (sourceTokenizer: FSharpSourceTokenizer) allLines stat |> List.mapi (fun index line -> line, (index + 1)) // line number is needed in tokenizeLine |> List.fold (fun (state, tokens) (line, lineNumber) -> - let tokenizer = - sourceTokenizer.CreateLineTokenizer(line) - - let nextState, tokensOfLine = - tokenizeLine tokenizer allLines state lineNumber [] - - let allTokens = - List.append tokens (List.rev tokensOfLine) // tokens of line are add in reversed order + let tokenizer = sourceTokenizer.CreateLineTokenizer(line) + let nextState, tokensOfLine = tokenizeLine tokenizer allLines state lineNumber [] + let allTokens = List.append tokens (List.rev tokensOfLine) // tokens of line are add in reversed order (nextState, allTokens)) (state, []) // empty tokens to start with |> snd // ignore the state diff --git a/src/Fantomas.Tests/LetBindingTests.fs b/src/Fantomas.Tests/LetBindingTests.fs index 5c58cf37c3..609ca567ae 100644 --- a/src/Fantomas.Tests/LetBindingTests.fs +++ b/src/Fantomas.Tests/LetBindingTests.fs @@ -248,9 +248,7 @@ module Card = | prop -> Some prop) |> keyValueList CaseRules.LowerFirst - let props = - JS.Object.assign (createEmpty, customProps, typeProps) - + let props = JS.Object.assign (createEmpty, customProps, typeProps) ofImport "Card" "reactstrap" props elems """ @@ -599,8 +597,7 @@ let genSigModuleDeclList astContext node = let sepXsAndYs = match List.tryHead ys with | Some hs -> - let attrs = - getRangesFromAttributesFromSynModuleSigDeclaration hs + let attrs = getRangesFromAttributesFromSynModuleSigDeclaration hs sepNln +> sepNlnConsideringTriviaContentBeforeWithAttributes hs.Range attrs @@ -793,8 +790,7 @@ let useEntries month year = let useEntries month year = let { Events = events } = useModel () - let isNotCancelled = - Projections.isNotCancelledEventChecker events + let isNotCancelled = Projections.isNotCancelledEventChecker events let filter = Projections.isInMonth month year @@ -852,8 +848,7 @@ let private authenticateRequest (logger: ILogger) header = let! config = manager.GetConfigurationAsync().ConfigureAwait(false) parameters.IssuerSigningKeys <- config.SigningKeys - let user, _ = - handler.ValidateToken((token: string), parameters) + let user, _ = handler.ValidateToken((token: string), parameters) if user.HasPermission("use:application") then return Some user.Identity.Name @@ -899,8 +894,7 @@ let private authenticateRequest (logger: ILogger) header = parameters.IssuerSigningKeys <- config.SigningKeys - let user, _ = - handler.ValidateToken((token: string), parameters) + let user, _ = handler.ValidateToken((token: string), parameters) if user.HasPermission("use:application") then return Some user.Identity.Name @@ -978,8 +972,7 @@ let useOverviewPerMonth () = balance = Projections.calculateBalance m y events |}) |> List.toArray - let balance = - rows |> Array.sumBy (fun mth -> mth.balance) + let balance = rows |> Array.sumBy (fun mth -> mth.balance) {| name = year months = rows @@ -1039,7 +1032,8 @@ let ``preserve new line new instance of class, 1034`` () = equal """ let notFound () = - let json = Encode.string "Not found" |> Encode.toString 4 + let json = + Encode.string "Not found" |> Encode.toString 4 new HttpResponseMessage( HttpStatusCode.NotFound, @@ -1189,8 +1183,7 @@ let x = List.singleton <| |> should equal """ -let x = - List.singleton <| let item = "text" in item +let x = List.singleton <| let item = "text" in item """ [] @@ -1662,14 +1655,12 @@ stepLog.LogInformation ( """ stepLog.LogInformation ( "Thing thing thing {Foo} thing", - (let (DuCase a) = - ThingThingThing.go options |> BlahBlah foo in a) + (let (DuCase a) = ThingThingThing.go options |> BlahBlah foo in a) ) stepLog.LogInformation ( "Thing thing thing {Foo} thing", - (let (DuCase a) = - ThingThingThing.go options |> BlahBlah foo in a) + (let (DuCase a) = ThingThingThing.go options |> BlahBlah foo in a) ) """ @@ -1720,8 +1711,7 @@ module Foo = let f1 = () let runTest () = - let (Thing f) = - [ a ; b ] |> Blah.tryConcat |> Option.get in f () |> ignore + let (Thing f) = [ a ; b ] |> Blah.tryConcat |> Option.get in f () |> ignore Assert.Throws runTest |> ignore @@ -1730,8 +1720,7 @@ module Foo = let f1 = () let runTest () = - let (Thing f) = - [ a ; b ] |> Blah.tryConcat |> Option.get in f () |> ignore + let (Thing f) = [ a ; b ] |> Blah.tryConcat |> Option.get in f () |> ignore Assert.Throws runTest |> ignore """ diff --git a/src/Fantomas.Tests/MaxValueBindingWidthTests.fs b/src/Fantomas.Tests/MaxValueBindingWidthTests.fs index 3cae7c6143..c52fd27e5d 100644 --- a/src/Fantomas.Tests/MaxValueBindingWidthTests.fs +++ b/src/Fantomas.Tests/MaxValueBindingWidthTests.fs @@ -64,7 +64,7 @@ let ``should apply to typed member value definition`` () = """ [] -let ``should not apply to short member value definition`` () = +let ``should not apply to short member property definition`` () = formatSourceString false """type T = @@ -72,7 +72,23 @@ let ``should not apply to short member value definition`` () = member this.c = d + 2 """ { config with - MaxFunctionBindingWidth = 30 } + MaxFunctionBindingWidth = 10 } + |> should + equal + """type T = + let a = b + 1 + member this.c = d + 2 +""" + +[] +let ``let with short member property definition`` () = + formatSourceString + false + """type T = + let a = b + 1 + member this.c = d + 2 + """ + config |> should equal """type T = diff --git a/src/Fantomas.Tests/MultilineFunctionApplicationsInConditionExpressionsTests.fs b/src/Fantomas.Tests/MultilineFunctionApplicationsInConditionExpressionsTests.fs index 01f2ef08e4..df1d0c793b 100644 --- a/src/Fantomas.Tests/MultilineFunctionApplicationsInConditionExpressionsTests.fs +++ b/src/Fantomas.Tests/MultilineFunctionApplicationsInConditionExpressionsTests.fs @@ -244,8 +244,7 @@ module Web3ServerSeedList = """ module Web3ServerSeedList = let MaybeRethrow (ex: Exception) : unit = - let rpcResponseExOpt = - FSharpUtil.FindException ex + let rpcResponseExOpt = FSharpUtil.FindException ex match rpcResponseExOpt with | Some rpcResponseEx -> diff --git a/src/Fantomas.Tests/NumberOfItemsListOrArrayTests.fs b/src/Fantomas.Tests/NumberOfItemsListOrArrayTests.fs index 88125cb462..0254fd5c71 100644 --- a/src/Fantomas.Tests/NumberOfItemsListOrArrayTests.fs +++ b/src/Fantomas.Tests/NumberOfItemsListOrArrayTests.fs @@ -11,7 +11,7 @@ let ``number of items sized lists are formatted properly`` () = false """ let xs = [ a; b; c ] -let ys = [ AReallyLongExpressionThatIsMuchLongerThan50Characters ] +let ys = [ AReallyLongExpressionThatIsMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerThan100Characters ] f xs [ x; y; z ] List.map (fun x -> x * x) [1;2;] """ @@ -27,7 +27,7 @@ let xs = c ] let ys = - [ AReallyLongExpressionThatIsMuchLongerThan50Characters ] + [ AReallyLongExpressionThatIsMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerThan100Characters ] f xs @@ -47,7 +47,7 @@ let ``number of items sized arrays are formatted properly`` () = false """ let xs = [| a; b; c |] -let ys = [| AReallyLongExpressionThatIsMuchLongerThan50Characters |] +let ys = [| AReallyLongExpressionThatIsMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerThan100Characters |] f xs [| x; y; z |] List.map (fun x -> x * x) [|1;2;|] """ @@ -63,7 +63,7 @@ let xs = c |] let ys = - [| AReallyLongExpressionThatIsMuchLongerThan50Characters |] + [| AReallyLongExpressionThatIsMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerMuchLongerThan100Characters |] f xs @@ -134,8 +134,7 @@ let xs = c ] -let ys = - [ AReallyLongExpressionThatIsMuchLongerThan50Characters ] +let ys = [ AReallyLongExpressionThatIsMuchLongerThan50Characters ] f xs @@ -177,8 +176,7 @@ let xs = c |] -let ys = - [| AReallyLongExpressionThatIsMuchLongerThan50Characters |] +let ys = [| AReallyLongExpressionThatIsMuchLongerThan50Characters |] f xs @@ -339,6 +337,5 @@ let y = [ longValueThatIsALotOfCharactersSoooooLong longValueThatIsALotOfCharactersSoooooLong ] -let z = - [ longValueThatIsALotOfCharactersSoooooLong; 100; 123 ] +let z = [ longValueThatIsALotOfCharactersSoooooLong; 100; 123 ] """ diff --git a/src/Fantomas.Tests/NumberOfItemsRecordTests.fs b/src/Fantomas.Tests/NumberOfItemsRecordTests.fs index 786bc5cd46..2aaa1caeaf 100644 --- a/src/Fantomas.Tests/NumberOfItemsRecordTests.fs +++ b/src/Fantomas.Tests/NumberOfItemsRecordTests.fs @@ -906,8 +906,7 @@ let r = b = y z = c } -let s = - { AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } +let s = { AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } let r' = { r with @@ -915,8 +914,7 @@ let r' = b = y z = c } -let s' = - { s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } +let s' = { s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } f r @@ -969,8 +967,7 @@ let r = z = c } -let s = - { AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } +let s = { AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } let r' = { r with @@ -979,8 +976,7 @@ let r' = z = c } -let s' = - { s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } +let s' = { s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 } f r @@ -1031,8 +1027,7 @@ let r = b = y z = c |} -let s = - {| AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} +let s = {| AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} let r' = {| r with @@ -1040,8 +1035,7 @@ let r' = b = y z = c |} -let s' = - {| s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} +let s' = {| s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} f r @@ -1094,8 +1088,7 @@ let r = z = c |} -let s = - {| AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} +let s = {| AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} let r' = {| r with @@ -1104,8 +1097,7 @@ let r' = z = c |} -let s' = - {| s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} +let s' = {| s with AReallyLongExpressionThatIsMuchLongerThan50Characters = 1 |} f r diff --git a/src/Fantomas.Tests/OperatorTests.fs b/src/Fantomas.Tests/OperatorTests.fs index 777857753b..b6a3304a7d 100644 --- a/src/Fantomas.Tests/OperatorTests.fs +++ b/src/Fantomas.Tests/OperatorTests.fs @@ -1011,7 +1011,8 @@ let MethInfosEquivByNameAndSig erasureFlag ignoreFinal g amap m minfo minfo2 = let MethInfosEquivByNameAndSig erasureFlag ignoreFinal g amap m minfo minfo2 = MethInfosEquivByNameAndPartialSig erasureFlag ignoreFinal g amap m minfo minfo2 && let (CompiledSig (_, retTy, formalMethTypars, _)) = CompiledSigOfMeth g amap m minfo in - let (CompiledSig (_, retTy2, formalMethTypars2, _)) = CompiledSigOfMeth g amap m minfo2 in + let (CompiledSig (_, retTy2, formalMethTypars2, _)) = + CompiledSigOfMeth g amap m minfo2 in match retTy, retTy2 with | None, None -> true diff --git a/src/Fantomas.Tests/PatternMatchingTests.fs b/src/Fantomas.Tests/PatternMatchingTests.fs index 5cefe0d6b6..c95eaedc99 100644 --- a/src/Fantomas.Tests/PatternMatchingTests.fs +++ b/src/Fantomas.Tests/PatternMatchingTests.fs @@ -782,11 +782,9 @@ let private userNameDecoder (get : Decode.IGetters) = equal """ let private userNameDecoder (get : Decode.IGetters) = - let givenName = - get.Optional.Field "given_name" Decode.string + let givenName = get.Optional.Field "given_name" Decode.string - let familyName = - get.Optional.Field "family_name" Decode.string + let familyName = get.Optional.Field "family_name" Decode.string match givenName, familyName with | Some g, Some f -> sprintf "%s %c" g f.[0] @@ -1123,8 +1121,7 @@ match foo with (isOperatorOrKeyword headToken && List.exists (fun k -> headToken.TokenInfo.TokenName = k) keywordTrivia) -> - let range = - getRangeBetween "keyword" headToken headToken + let range = getRangeBetween "keyword" headToken headToken let info = Trivia.Create(Keyword(headToken)) range @@ -1677,9 +1674,7 @@ let GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = | _ -> false)) | None -> false -> - let (kind, mark) = - ListAssoc.find g.valRefEq v eenv.innerVals // already checked above in when guard - + let (kind, mark) = ListAssoc.find g.valRefEq v eenv.innerVals // already checked above in when guard () """ diff --git a/src/Fantomas.Tests/RecordTests.fs b/src/Fantomas.Tests/RecordTests.fs index 0fe6e6977c..3bc022d6e9 100644 --- a/src/Fantomas.Tests/RecordTests.fs +++ b/src/Fantomas.Tests/RecordTests.fs @@ -1879,8 +1879,7 @@ let parse (checker: FSharpChecker) (parsingOptions: FSharpParsingOptions) { File ConditionalCompilationDefines = conditionalCompilationDefines SourceFiles = Array.map safeFileName parsingOptions.SourceFiles } // Run the first phase (untyped parsing) of the compiler - let sourceText = - FSharp.Compiler.Text.SourceText.ofString source + let sourceText = FSharp.Compiler.Text.SourceText.ofString source let! untypedRes = checker.ParseFile(fileName, sourceText, parsingOptionsWithDefines) diff --git a/src/Fantomas.Tests/StringTests.fs b/src/Fantomas.Tests/StringTests.fs index 19392cce7c..f996c3cb33 100644 --- a/src/Fantomas.Tests/StringTests.fs +++ b/src/Fantomas.Tests/StringTests.fs @@ -10,7 +10,7 @@ let ``triple-quoted strings`` () = false "let xmlFragment2 = \"\"\"\"\"\"" { config with - MaxValueBindingWidth = 60 } + MaxValueBindingWidth = 80 } |> should equal "let xmlFragment2 = \"\"\"\"\"\" @@ -30,7 +30,9 @@ let str1 = "abc" |> should equal """ -let xmlFragment1 = @"" +let xmlFragment1 = + @"" + let str1 = "abc" """ diff --git a/src/Fantomas.Tests/SynConstTests.fs b/src/Fantomas.Tests/SynConstTests.fs index bb236fdc5c..cb6fc582bc 100644 --- a/src/Fantomas.Tests/SynConstTests.fs +++ b/src/Fantomas.Tests/SynConstTests.fs @@ -666,8 +666,6 @@ a:hover {color: #ecc;} | Some x -> x.Remove() | _ -> ()) - let packable = - Path.getFullName \"./_Binaries/README.html\" - + let packable = Path.getFullName \"./_Binaries/README.html\" xmlform.Save packable " diff --git a/src/Fantomas.Tests/TupleTests.fs b/src/Fantomas.Tests/TupleTests.fs index 12b807d5e7..62925801bb 100644 --- a/src/Fantomas.Tests/TupleTests.fs +++ b/src/Fantomas.Tests/TupleTests.fs @@ -19,7 +19,8 @@ let private carouselSample = MaxValueBindingWidth = 75 } |> should equal - """let private carouselSample = FunctionComponent.Of((fun _ -> fragment [] []), "CarouselSample") + """let private carouselSample = + FunctionComponent.Of((fun _ -> fragment [] []), "CarouselSample") """ [] diff --git a/src/Fantomas.Tests/TypeDeclarationTests.fs b/src/Fantomas.Tests/TypeDeclarationTests.fs index 512119d220..d190493c4f 100644 --- a/src/Fantomas.Tests/TypeDeclarationTests.fs +++ b/src/Fantomas.Tests/TypeDeclarationTests.fs @@ -701,8 +701,11 @@ let the_interface = ref([] : (string * (string * hol_type)) list) |> should equal """ -let user_printers = ref ([]: (string * (term -> unit)) list) -let the_interface = ref ([]: (string * (string * hol_type)) list) +let user_printers = + ref ([]: (string * (term -> unit)) list) + +let the_interface = + ref ([]: (string * (string * hol_type)) list) """ [] @@ -2228,8 +2231,7 @@ type Auth0User = static member Decoder : Decoder = Decode.object (fun get -> - let userId = - get.Required.Field "user_id" Decode.string + let userId = get.Required.Field "user_id" Decode.string let metaData = get.Optional.Field "app_metadata" AppMetaData.Decoder @@ -2802,8 +2804,7 @@ and [] Bar<'context, 'a> = let (bf, bv) = b if typeof<'bb> = typeof<'cb> then - let bv = - unbox> bv + let bv = unbox> bv this.InnerEquals av diff --git a/src/Fantomas.Tests/UnionTests.fs b/src/Fantomas.Tests/UnionTests.fs index 819253bbc0..1faa4838b5 100644 --- a/src/Fantomas.Tests/UnionTests.fs +++ b/src/Fantomas.Tests/UnionTests.fs @@ -42,8 +42,7 @@ type uColor = | Green = 1u | Blue = 2u -let col3 = - Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue(2u) +let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue(2u) """ [] @@ -208,8 +207,7 @@ type uColor = | Green = 1u | Blue = 2u -let col3 = - Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue(2u) +let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue(2u) """ [] diff --git a/src/Fantomas/CodePrinter.fs b/src/Fantomas/CodePrinter.fs index a6807bebab..06cd48d9d6 100644 --- a/src/Fantomas/CodePrinter.fs +++ b/src/Fantomas/CodePrinter.fs @@ -5503,25 +5503,25 @@ and genLetBindingDestructedTuple let equalsRange (ctx: Context) = ctx.MkRange pat.Range.End e.Range.Start genPreXmlDoc px - +> leadingExpressionIsMultiline - (genAttrAndPref - +> afterLetKeyword - +> sepSpace - +> genDestructedTuples - +> (fun ctx -> tokN (equalsRange ctx) EQUALS sepEq ctx)) - (fun isMultiline ctx -> - let short = sepSpace +> genExpr astContext e + +> genAttrAndPref + +> (fun ctx -> + let prefix = + afterLetKeyword + +> sepSpace + +> genDestructedTuples + +> (fun ctx -> tokN (equalsRange ctx) EQUALS sepEq ctx) - let long = - indent - +> sepNln - +> genExpr astContext e - +> unindent + let long = + prefix + +> indent + +> sepNln + +> genExpr astContext e + +> unindent - if isMultiline then - long ctx - else - isShortExpression ctx.Config.MaxValueBindingWidth short long ctx) + let short = + prefix +> sepSpace +> genExpr astContext e + + isShortExpression ctx.Config.MaxValueBindingWidth short long ctx) and genSynBindingValue (astContext: ASTContext) @@ -5586,27 +5586,27 @@ and genSynBindingValue genPreXmlDoc px +> genAttrIsFirstChild - +> leadingExpressionIsMultiline - (genAfterAttributesBefore SynBinding_AfterAttributes_BeforeHeadPattern afterAttributesBeforeHeadPattern - +> genPref - +> afterLetKeyword - +> sepSpace - +> genValueName - +> genReturnType - +> (fun ctx -> genEqualsInBinding (equalsRange ctx) ctx)) - (fun isMultiline ctx -> - let short = genExprKeepIndentInBranch astContext e + +> genAfterAttributesBefore SynBinding_AfterAttributes_BeforeHeadPattern afterAttributesBeforeHeadPattern + +> genPref + +> (fun ctx -> + let prefix = + afterLetKeyword + +> sepSpace + +> genValueName + +> genReturnType + +> (fun ctx -> genEqualsInBinding (equalsRange ctx) ctx) - let long = - indent - +> sepNln - +> genExprKeepIndentInBranch astContext e - +> unindent + let short = + prefix +> genExprKeepIndentInBranch astContext e - if isMultiline then - long ctx - else - isShortExpression ctx.Config.MaxValueBindingWidth short long ctx) + let long = + prefix + +> indent + +> sepNln + +> genExprKeepIndentInBranch astContext e + +> unindent + + isShortExpression ctx.Config.MaxValueBindingWidth short long ctx) and genParenTupleWithIndentAndNewlines (astContext: ASTContext) (ps: SynPat list) (pr: range) : Context -> Context = sepOpenT diff --git a/src/Fantomas/FormatConfig.fs b/src/Fantomas/FormatConfig.fs index 5de9aedcd0..132e025e19 100644 --- a/src/Fantomas/FormatConfig.fs +++ b/src/Fantomas/FormatConfig.fs @@ -122,7 +122,7 @@ type FormatConfig = MaxArrayOrListWidth = 40 MaxArrayOrListNumberOfItems = 1 ArrayOrListMultilineFormatter = MultilineFormatterType.CharacterWidth - MaxValueBindingWidth = 40 + MaxValueBindingWidth = 80 MaxFunctionBindingWidth = 40 MaxDotGetExpressionWidth = 50 MultilineBlockBracketsOnSameColumn = false