From 3364c5ac5e0050e4b5a5cd2b9fb6b908d0747032 Mon Sep 17 00:00:00 2001 From: nojaf Date: Wed, 12 Nov 2025 08:56:49 +0100 Subject: [PATCH 1/2] Update SDK to 10.0.100 --- global.json | 2 +- src/fsdocs-tool/fsdocs-tool.fsproj | 2 +- tests/FSharp.ApiDocs.Tests/FSharp.ApiDocs.Tests.fsproj | 2 +- tests/FSharp.CodeFormat.Tests/FSharp.CodeFormat.Tests.fsproj | 2 +- tests/FSharp.Literate.Tests/FSharp.Literate.Tests.fsproj | 2 +- tests/FSharp.Markdown.Tests/FSharp.Markdown.Tests.fsproj | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/global.json b/global.json index 4e550c173..1e7fdfa95 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.400", + "version": "10.0.100", "rollForward": "latestMinor" } } diff --git a/src/fsdocs-tool/fsdocs-tool.fsproj b/src/fsdocs-tool/fsdocs-tool.fsproj index c1890fed1..73d5540cd 100644 --- a/src/fsdocs-tool/fsdocs-tool.fsproj +++ b/src/fsdocs-tool/fsdocs-tool.fsproj @@ -3,7 +3,7 @@ Exe fsdocs - net8.0 + net10.0 fsdocs-tool LatestMajor true diff --git a/tests/FSharp.ApiDocs.Tests/FSharp.ApiDocs.Tests.fsproj b/tests/FSharp.ApiDocs.Tests/FSharp.ApiDocs.Tests.fsproj index 33ed5d45f..0677d55f3 100644 --- a/tests/FSharp.ApiDocs.Tests/FSharp.ApiDocs.Tests.fsproj +++ b/tests/FSharp.ApiDocs.Tests/FSharp.ApiDocs.Tests.fsproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 LatestMajor true diff --git a/tests/FSharp.CodeFormat.Tests/FSharp.CodeFormat.Tests.fsproj b/tests/FSharp.CodeFormat.Tests/FSharp.CodeFormat.Tests.fsproj index bb82b7cd8..a6c26396c 100644 --- a/tests/FSharp.CodeFormat.Tests/FSharp.CodeFormat.Tests.fsproj +++ b/tests/FSharp.CodeFormat.Tests/FSharp.CodeFormat.Tests.fsproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 LatestMajor true diff --git a/tests/FSharp.Literate.Tests/FSharp.Literate.Tests.fsproj b/tests/FSharp.Literate.Tests/FSharp.Literate.Tests.fsproj index a931eff92..f205f5d3b 100644 --- a/tests/FSharp.Literate.Tests/FSharp.Literate.Tests.fsproj +++ b/tests/FSharp.Literate.Tests/FSharp.Literate.Tests.fsproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 LatestMajor true diff --git a/tests/FSharp.Markdown.Tests/FSharp.Markdown.Tests.fsproj b/tests/FSharp.Markdown.Tests/FSharp.Markdown.Tests.fsproj index 7b47455fe..7cf41388d 100644 --- a/tests/FSharp.Markdown.Tests/FSharp.Markdown.Tests.fsproj +++ b/tests/FSharp.Markdown.Tests/FSharp.Markdown.Tests.fsproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 LatestMajor true From 5c32af0fa309e23e9db6cb4e2110e79feee7f512 Mon Sep 17 00:00:00 2001 From: nojaf Date: Wed, 12 Nov 2025 08:59:17 +0100 Subject: [PATCH 2/2] Update Fantomas --- .config/dotnet-tools.json | 11 ++-- src/FSharp.Formatting.ApiDocs/GenerateHtml.fs | 56 ++++++++--------- .../GenerateMarkdown.fs | 50 +++++++-------- .../GenerateModel.fs | 63 +++++++++---------- src/FSharp.Formatting.Common/Menu.fs | 5 +- src/FSharp.Formatting.Literate/Literate.fs | 12 ++-- .../Transformations.fs | 7 +-- src/FSharp.Formatting.Markdown/Markdown.fs | 3 +- src/fsdocs-tool/BuildCommand.fs | 8 +-- tests/FSharp.Literate.Tests/LiterateTests.fs | 12 +--- 10 files changed, 103 insertions(+), 124 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 94a9edcc6..bcf6f2b1d 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,22 +3,25 @@ "isRoot": true, "tools": { "fantomas": { - "version": "6.3.16", + "version": "7.0.3", "commands": [ "fantomas" - ] + ], + "rollForward": false }, "fsharp-analyzers": { "version": "0.32.1", "commands": [ "fsharp-analyzers" - ] + ], + "rollForward": false }, "dotnet-repl": { "version": "0.1.216", "commands": [ "dotnet-repl" - ] + ], + "rollForward": false } } } \ No newline at end of file diff --git a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs index da215d3d9..49a3419fb 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs @@ -118,7 +118,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = thead [] [ tr [] [ td [ Class "fsdocs-member-list-header" ] [ !!tableHeader ] - td [ Class "fsdocs-member-list-header" ] [ !! "Description"; fsdocsDetailsToggle [] ] + td [ Class "fsdocs-member-list-header" ] [ !!"Description"; fsdocsDetailsToggle [] ] ] ] tbody [] [ @@ -131,23 +131,23 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = p [] [ a [ Id m.Name ] [ a [ Href("#" + m.Name) ] [ embed m.UsageHtml ] ] ] ] [ div [ Class "member-tooltip" ] [ - !! "Full Usage: " + !!"Full Usage: " embed m.UsageHtml br [] br [] if not m.Parameters.IsEmpty then - !! "Parameters: " + !!"Parameters: " ul [] [ for p in m.Parameters do span [] [ b [] [ !!p.ParameterNameText ] - !! ":" + !!":" embed p.ParameterType match p.ParameterDocs with | None -> () | Some d -> - !! " - " + !!" - " embed d ] @@ -174,7 +174,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = //!! "Signature: " //encode(m.SignatureTooltip) if not m.Modifiers.IsEmpty then - !! "Modifiers: " + !!"Modifiers: " encode (m.FormatModifiers) br [] @@ -183,7 +183,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = match m.FormatTypeArguments with | None -> () | Some v -> - !! "Type parameters: " + !!"Type parameters: " encode (v) ] ] @@ -207,7 +207,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = match m.ExtendedType with | Some(_, extendedTypeHtml) -> - p [] [ !! "Extended Type: "; embed extendedTypeHtml ] + p [] [ !!"Extended Type: "; embed extendedTypeHtml ] | _ -> () if not m.Parameters.IsEmpty then @@ -217,7 +217,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = span [ Class "fsdocs-param-name" ] [ !!parameter.ParameterNameText ] - !! ":" + !!":" embed parameter.ParameterType ] @@ -263,12 +263,12 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = ] for e in m.Comment.Notes do - h5 [ Class "fsdocs-note-header" ] [ !! "Note" ] + h5 [ Class "fsdocs-note-header" ] [ !!"Note" ] p [ Class "fsdocs-note" ] [ embed e ] for e in m.Comment.Examples do - h5 [ Class "fsdocs-example-header" ] [ !! "Example" ] + h5 [ Class "fsdocs-example-header" ] [ !!"Example" ] p [ yield Class "fsdocs-example" @@ -314,7 +314,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = elif hasTypes then "Type" else "Modules") ] - td [] [ !! "Description" ] + td [] [ !!"Description" ] ] ] tbody [] [ @@ -375,7 +375,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = h2 [] [ !!(usageName + (if entity.IsTypeDefinition then " Type" else " Module")) ] dl [ Class "fsdocs-metadata" ] [ dt [] [ - !! "Namespace: " + !!"Namespace: " a [ Href(info.Namespace.Url(root, collectionName, qualify, model.FileExtensions.InUrl)) ] [ !!info.Namespace.Name ] @@ -386,19 +386,19 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = | None -> () | Some parentModule -> dt [] [ - !! "Parent Module: " + !!"Parent Module: " a [ Href(parentModule.Url(root, collectionName, qualify, model.FileExtensions.InUrl)) ] [ !!parentModule.Name ] ] match entity.AbbreviatedType with - | Some(_, abbreviatedTypHtml) -> dt [] [ !! "Abbreviation For: "; embed abbreviatedTypHtml ] + | Some(_, abbreviatedTypHtml) -> dt [] [ !!"Abbreviation For: "; embed abbreviatedTypHtml ] | None -> () match entity.BaseType with - | Some(_, baseTypeHtml) -> dt [] [ !! "Base Type: "; embed baseTypeHtml ] + | Some(_, baseTypeHtml) -> dt [] [ !!"Base Type: "; embed baseTypeHtml ] | None -> () match entity.AllInterfaces with @@ -408,7 +408,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = !!("All Interfaces: ") for (i, (_, ityHtml)) in Seq.indexed l do if i <> 0 then - !! ", " + !!", " embed ityHtml ] @@ -444,12 +444,12 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = | Some r -> p [ Class "fsdocs-remarks" ] [ embed r ] | None -> () for note in entity.Comment.Notes do - h5 [ Class "fsdocs-note-header" ] [ !! "Note" ] + h5 [ Class "fsdocs-note-header" ] [ !!"Note" ] p [ Class "fsdocs-note" ] [ embed note ] for example in entity.Comment.Examples do - h5 [ Class "fsdocs-example-header" ] [ !! "Example" ] + h5 [ Class "fsdocs-example-header" ] [ !!"Example" ] p [ Class "fsdocs-example" ] [ embed example ] @@ -457,7 +457,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = if (byCategory.Length > 1) then // If there is more than 1 category in the type, generate TOC - h3 [] [ !! "Table of contents" ] + h3 [] [ !!"Table of contents" ] ul [] [ for (index, _, name) in byCategory do @@ -528,7 +528,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = ] if (allByCategory.Length > 1) then - h3 [] [ !! "Contents" ] + h3 [] [ !!"Contents" ] ul [] [ for category in allByCategory do @@ -576,13 +576,13 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = // // For non-FSharp.Core we only show one link "API Reference" in the nav menu if otherDocs && model.Collection.CollectionName <> "FSharp.Core" then - li [ Class "nav-header" ] [ !! "API Reference" ] + li [ Class "nav-header" ] [ !!"API Reference" ] li [ Class "nav-item" ] [ a [ Class "nav-link" Href(model.IndexFileUrl(root, collectionName, qualify, model.FileExtensions.InUrl)) - ] [ !! "All Namespaces" ] + ] [ !!"All Namespaces" ] ] else @@ -591,7 +591,7 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = let someExist = categorise.Length > 0 if someExist then - li [ Class "nav-header" ] [ !! "Namespaces" ] + li [ Class "nav-header" ] [ !!"Namespaces" ] for allByCategory, ns in categorise do @@ -713,13 +713,13 @@ type HtmlRender(model: ApiDocModel, ?menuTemplateFolder: string) = (let content = div [] [ - h1 [] [ !! "API Reference" ] - h2 [] [ !! "Available Namespaces:" ] + h1 [] [ !!"API Reference" ] + h2 [] [ !!"Available Namespaces:" ] table [ Class "table outer-list fsdocs-member-list" ] [ thead [] [ tr [] [ - td [ Class "fsdocs-member-list-header" ] [ !! "Namespace" ] - td [ Class "fsdocs-member-list-header" ] [ !! "Description" ] + td [ Class "fsdocs-member-list-header" ] [ !!"Namespace" ] + td [ Class "fsdocs-member-list-header" ] [ !!"Description" ] ] ] tbody [] (tableOfNamespacesAux ()) diff --git a/src/FSharp.Formatting.ApiDocs/GenerateMarkdown.fs b/src/FSharp.Formatting.ApiDocs/GenerateMarkdown.fs index 545c0aac4..75e972883 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateMarkdown.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateMarkdown.fs @@ -19,7 +19,7 @@ let htmlStringSafe (x: ApiDocHtml) = let embed (x: ApiDocHtml) = !!(htmlString x) let embedSafe (x: ApiDocHtml) = !!(htmlStringSafe x) -let br = !! "
" +let br = !!"
" type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = let root = model.Root @@ -36,7 +36,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = ``###`` [ !!header ] table - [ [ p [ !!tableHeader ] ]; [ p [ !! "Description" ] ]; [ p [ !! "Source" ] ] ] + [ [ p [ !!tableHeader ] ]; [ p [ !!"Description" ] ]; [ p [ !!"Source" ] ] ] [ AlignLeft; AlignLeft; AlignCenter ] [ for m in members -> [ [ p [ link [ embedSafe (m.UsageHtml) ] ("#" + urlEncode (m.Name)) ] ] @@ -52,7 +52,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = | Some r -> p [ embedSafe r; br ] if not m.Parameters.IsEmpty then - p [ !! "Parameters" ] + p [ !!"Parameters" ] p [] yield! @@ -60,7 +60,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = |> List.collect (fun parameter -> [ p [ strong [ !!parameter.ParameterNameText ] - !! ": " + !!": " embedSafe parameter.ParameterType ] match parameter.ParameterDocs with | None -> () @@ -72,7 +72,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = match m.ExtendedType with | None -> () - | Some(_, extendedTypeHtml) -> p [ !! "Extended Type: "; embedSafe extendedTypeHtml; br ] + | Some(_, extendedTypeHtml) -> p [ !!"Extended Type: "; embedSafe extendedTypeHtml; br ] match m.ReturnInfo.ReturnType with | None -> () @@ -100,11 +100,11 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = br ] for e in m.Comment.Notes do - p [ !! "Note" ] + p [ !!"Note" ] p [ embed e; br ] for e in m.Comment.Examples do - p [ !! "Example" ] + p [ !!"Example" ] p [ embed e; br ] ] [ p [ yield! sourceLink m.SourceLocation ] ] ] ] ] @@ -119,8 +119,8 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = [ !!(if hasTypes && hasModules then "Type/Module" elif hasTypes then "Type" else "Modules") ] - p [ !! "Description" ] - p [ !! "Source" ] ] ] + p [ !!"Description" ] + p [ !!"Source" ] ] ] [ AlignLeft; AlignLeft; AlignCenter ] [ for e in entities do [ [ p @@ -158,7 +158,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = [ ``##`` [ !!(usageName + (if entity.IsTypeDefinition then " Type" else " Module")) ] p - [ !! "Namespace: " + [ !!"Namespace: " link [ !!info.Namespace.Name ] (info.Namespace.Url(root, collectionName, qualify, model.FileExtensions.InUrl)) ] @@ -168,27 +168,27 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = | None -> () | Some parentModule -> p - [ !! "Parent Module: " + [ !!"Parent Module: " link [ !!parentModule.Name ] (parentModule.Url(root, collectionName, qualify, model.FileExtensions.InUrl)) ] match entity.AbbreviatedType with - | Some(_, abbreviatedTyp) -> p [ !! "Abbreviation For: "; embed abbreviatedTyp ] + | Some(_, abbreviatedTyp) -> p [ !!"Abbreviation For: "; embed abbreviatedTyp ] | None -> () match entity.BaseType with - | Some(_, baseType) -> p [ !! "Base Type: "; embed baseType ] + | Some(_, baseType) -> p [ !!"Base Type: "; embed baseType ] | None -> () match entity.AllInterfaces with | [] -> () | l -> p - [ !! "All Interfaces: " + [ !!"All Interfaces: " for (i, (_, interfaceTyHtml)) in Seq.indexed l do if i <> 0 then - !! ", " + !!", " embed interfaceTyHtml ] @@ -220,16 +220,16 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = | None -> () for note in entity.Comment.Notes do - ``#####`` [ !! "Note" ] + ``#####`` [ !!"Note" ] p [ embed note ] for example in entity.Comment.Examples do - ``#####`` [ !! "Example" ] + ``#####`` [ !!"Example" ] p [ embed example ] if (byCategory.Length > 1) then // If there is more than 1 category in the type, generate TOC - ``###`` [ !! "Table of contents" ] + ``###`` [ !!"Table of contents" ] ul [ for (index, _, name) in byCategory do @@ -294,7 +294,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = | None -> () if (allByCategory.Length > 1) then - ``###`` [ !! "Contents" ] + ``###`` [ !!"Contents" ] ul [ for category in allByCategory do @@ -313,9 +313,9 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = // For non-FSharp.Core we only show one link "API Reference" in the nav menu if otherDocs && nav && model.Collection.CollectionName <> "FSharp.Core" then p - [ !! "API Reference" + [ !!"API Reference" link - [ !! "All Namespaces" ] + [ !!"All Namespaces" ] (model.IndexFileUrl(root, collectionName, qualify, model.FileExtensions.InUrl)) ] else @@ -324,7 +324,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = let someExist = categorise.Length > 0 if someExist && nav then - p [ !! "Namespaces" ] + p [ !!"Namespaces" ] for allByCategory, ns in categorise do @@ -334,7 +334,7 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = // If not in the navigation list then generate the summary text as well if not nav then - !! " - " + !!" - " match ns.NamespaceDocs with | Some nsdocs -> embed nsdocs.Summary @@ -416,8 +416,8 @@ type MarkdownRender(model: ApiDocModel, ?menuTemplateFolder: string) = (let content = MarkdownDocument( - [ ``#`` [ !! "API Reference" ] - ``##`` [ !! "Available Namespaces" ] + [ ``#`` [ !!"API Reference" ] + ``##`` [ !!"Available Namespaces" ] ul [ (listOfNamespacesAux false false None) ] ], Map.empty ) diff --git a/src/FSharp.Formatting.ApiDocs/GenerateModel.fs b/src/FSharp.Formatting.ApiDocs/GenerateModel.fs index a70f7f701..36c9ee71e 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateModel.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateModel.fs @@ -1123,12 +1123,7 @@ module internal TypeFormatter = let html = code [] [ html ] ApiDocHtml( - html - .ToString() - .Replace(" ", "") - .Replace("\n", "") - .Replace("\r", "") - .Replace(" core @@ -1186,11 +1181,11 @@ module internal TypeFormatter = if prefix then match args with | [] -> typeName - | [ arg ] -> span [] [ typeName; !! "<"; (formatTypeWithPrecAsHtml ctx 4 arg); !! ">" ] + | [ arg ] -> span [] [ typeName; !!"<"; (formatTypeWithPrecAsHtml ctx 4 arg); !!">" ] | args -> bracketHtmlIf (prec <= 1) - (span [] [ typeName; !! "<"; formatTypesWithPrecAsHtml ctx 2 ", " args; !! ">" ]) + (span [] [ typeName; !!"<"; formatTypesWithPrecAsHtml ctx 2 ", " args; !!">" ]) else match args with | [] -> typeName @@ -1198,7 +1193,7 @@ module internal TypeFormatter = if tcref.DisplayName.StartsWith '[' then span [] [ formatTypeWithPrecAsHtml ctx 2 arg; !!tcref.DisplayName ] else - span [] [ formatTypeWithPrecAsHtml ctx 2 arg; !! " "; typeName ] + span [] [ formatTypeWithPrecAsHtml ctx 2 arg; !!" "; typeName ] | args -> bracketHtmlIf (prec <= 1) @@ -1216,12 +1211,12 @@ module internal TypeFormatter = | MeasureProd(MeasureOne, ty) -> formatTypeWithPrecAsHtml ctx prec ty | MeasureProd(ty1, MeasureInv ty2) | MeasureProd(ty1, MeasureProd(MeasureInv ty2, MeasureOne)) -> - span [] [ formatTypeWithPrecAsHtml ctx 2 ty1; !! "/"; formatTypeWithPrecAsHtml ctx 2 ty2 ] + span [] [ formatTypeWithPrecAsHtml ctx 2 ty1; !!"/"; formatTypeWithPrecAsHtml ctx 2 ty2 ] | MeasureProd(ty1, MeasureProd(ty2, MeasureOne)) | MeasureProd(ty1, ty2) -> - span [] [ formatTypeWithPrecAsHtml ctx 2 ty1; !! "*"; formatTypeWithPrecAsHtml ctx 2 ty2 ] - | MeasureInv ty -> span [] [ !! "/"; formatTypeWithPrecAsHtml ctx 1 ty ] - | MeasureOne -> !! "1" + span [] [ formatTypeWithPrecAsHtml ctx 2 ty1; !!"*"; formatTypeWithPrecAsHtml ctx 2 ty2 ] + | MeasureInv ty -> span [] [ !!"/"; formatTypeWithPrecAsHtml ctx 1 ty ] + | MeasureOne -> !!"1" | _ when typ.HasTypeDefinition -> let tcref = typ.TypeDefinition let tyargs = typ.GenericArguments |> Seq.toList @@ -1235,13 +1230,13 @@ module internal TypeFormatter = if typ.IsFunctionType then let domainTyp, retType = typ.GenericArguments.[0], typ.GenericArguments.[1] - loop (soFar @ [ formatTypeWithPrecAsHtml ctx 4 domainTyp; !! " -> " ]) retType + loop (soFar @ [ formatTypeWithPrecAsHtml ctx 4 domainTyp; !!" -> " ]) retType else span [] (soFar @ [ formatTypeWithPrecAsHtml ctx 5 typ ]) bracketHtmlIf (prec <= 4) (loop [] typ) | _ when typ.IsGenericParameter -> !!(formatTypeArgumentAsText typ.GenericParameter) - | _ -> !! "(type)" + | _ -> !!"(type)" let formatTypeAsHtml ctx (typ: FSharpType) = formatTypeWithPrecAsHtml ctx 5 typ @@ -1295,8 +1290,8 @@ module internal TypeFormatter = let argTuple = args |> List.map (formatArgNameAndType (counter ()) >> fst) match argTuple with - | [] -> !! "()" - | [ argName ] when argName = "()" -> !! "()" + | [] -> !!"()" + | [ argName ] when argName = "()" -> !!"()" | [ argName ] when preferNoParens -> !!argName | args -> let argText = args |> List.map (!!) |> Html.sepWith ", " @@ -1311,7 +1306,7 @@ module internal TypeFormatter = |> List.map (formatArgNameAndTypePairUsageAsHtml ctx) |> Html.sepWith " * " - span [] ([ !!nm; !! "("; args; !! " -> "; formatTypeAsHtml ctx typ.DelegateReturnType; !! ")" ]) + span [] ([ !!nm; !!"("; args; !!" -> "; formatTypeAsHtml ctx typ.DelegateReturnType; !!")" ]) [] module internal SymbolReader = @@ -1433,7 +1428,7 @@ module internal SymbolReader = let fullArgUsage = match argInfos with - | [ [] ] when (v.IsProperty && v.HasGetterMethod) -> !! "" + | [ [] ] when (v.IsProperty && v.HasGetterMethod) -> !!"" | _ -> formatCurriedArgsUsageAsHtml preferNoParens isItemIndexer argInfos let usageHtml = @@ -1449,7 +1444,7 @@ module internal SymbolReader = fullArgUsage ] // Indexers - | _, true, _, "Item", _ -> span [] [ !! "this["; fullArgUsage; !! "]" ] + | _, true, _, "Item", _ -> span [] [ !!"this["; fullArgUsage; !!"]" ] // Custom operators | _, _, _, _, Some name -> @@ -1457,7 +1452,7 @@ module internal SymbolReader = [] [ !!name if preferNoParens then - !! " " + !!" " fullArgUsage ] // op_XYZ operators @@ -1473,7 +1468,7 @@ module internal SymbolReader = let right = formatArgUsageAsHtml 1 y - span [] [ left; !! " "; encode nm; !! " "; right ] + span [] [ left; !!" "; encode nm; !!" "; right ] // unary operators | [ [ x ] ] -> @@ -1487,17 +1482,17 @@ module internal SymbolReader = [] [ !!name if preferNoParens then - !! " " + !!" " fullArgUsage ] // Ordinary instance members | _, true, _, name, _ -> span [] - [ !! "this." + [ !!"this." !!name if preferNoParens then - !! " " + !!" " fullArgUsage ] // A hack for Array.Parallel.map in FSharp.Core. TODO: generalise this @@ -1506,7 +1501,7 @@ module internal SymbolReader = [] [ !!("Array.Parallel." + name) if preferNoParens then - !! " " + !!" " fullArgUsage ] // Ordinary functions or values @@ -1515,7 +1510,7 @@ module internal SymbolReader = [] [ !!name if preferNoParens then - !! " " + !!" " fullArgUsage ] // Ordinary static members or things (?) that require fully qualified access @@ -1526,7 +1521,7 @@ module internal SymbolReader = | None -> !!name | Some aee -> !!(aee.DisplayName + "." + name) if preferNoParens then - !! " " + !!" " fullArgUsage ] let usageHtml = codeHtml usageHtml @@ -1638,15 +1633,15 @@ module internal SymbolReader = let fieldsHtmls = fields |> List.map formatFieldUsage if case.Name = "op_ColonColon" then - span [] [ fieldsHtmls.[0]; !! " "; !!nm; fieldsHtmls.[1] ] |> codeHtml + span [] [ fieldsHtmls.[0]; !!" "; !!nm; fieldsHtmls.[1] ] |> codeHtml else match fieldsHtmls with | [] -> span [] [ !!nm ] - | [ fieldHtml ] -> span [] [ !!nm; !! " "; fieldHtml ] + | [ fieldHtml ] -> span [] [ !!nm; !!" "; fieldHtml ] | _ -> let fieldHtml = fieldsHtmls |> Html.sepWith ", " - span [] [ !!nm; !! "("; fieldHtml; !! ")" ] + span [] [ !!nm; !!"("; fieldHtml; !!")" ] |> codeHtml let paramTypes = @@ -1737,7 +1732,7 @@ module internal SymbolReader = span [] [ !!staticParam.Name - !! ": " + !!": " formatTypeAsHtml ctx.UrlMap staticParam.Kind !!(if staticParam.IsOptional then sprintf " (optional, default = %A)" staticParam.DefaultValue diff --git a/src/FSharp.Formatting.Common/Menu.fs b/src/FSharp.Formatting.Common/Menu.fs index 77f8b5f47..52e608d35 100644 --- a/src/FSharp.Formatting.Common/Menu.fs +++ b/src/FSharp.Formatting.Common/Menu.fs @@ -10,10 +10,7 @@ type MenuItem = IsActive: bool } let private snakeCase (v: string) = - System.Text.RegularExpressions.Regex - .Replace(v, "[A-Z]", "$0") - .Replace(" ", "_") - .ToLower() + System.Text.RegularExpressions.Regex.Replace(v, "[A-Z]", "$0").Replace(" ", "_").ToLower() let createMenu (input: string) (isCategoryActive: bool) (header: string) (items: MenuItem list) : string = let pwd = Directory.GetCurrentDirectory() diff --git a/src/FSharp.Formatting.Literate/Literate.fs b/src/FSharp.Formatting.Literate/Literate.fs index fd363a18e..c77a17c24 100644 --- a/src/FSharp.Formatting.Literate/Literate.fs +++ b/src/FSharp.Formatting.Literate/Literate.fs @@ -115,8 +115,7 @@ type Literate private () = let rootInputFolder = Some(defaultArg rootInputFolder (Path.GetDirectoryName(path))) - ParseScript(parseOptions, ctx) - .ParseAndCheckScriptFile(path, File.ReadAllText path, rootInputFolder, onError) + ParseScript(parseOptions, ctx).ParseAndCheckScriptFile(path, File.ReadAllText path, rootInputFolder, onError) |> Transformations.generateReferences references |> Transformations.formatCodeSnippets path ctx |> Transformations.evaluateCodeSnippets ctx @@ -145,8 +144,7 @@ type Literate private () = | None -> "C:\\script.fsx" | Some r -> Path.Combine(r, "script.fsx") - ParseScript(parseOptions, ctx) - .ParseAndCheckScriptFile(filePath, content, rootInputFolder, onError) + ParseScript(parseOptions, ctx).ParseAndCheckScriptFile(filePath, content, rootInputFolder, onError) |> Transformations.generateReferences references |> Transformations.formatCodeSnippets filePath ctx |> Transformations.evaluateCodeSnippets ctx @@ -249,8 +247,7 @@ type Literate private () = let content = ParsePynb.pynbStringToFsx content - ParseScript(parseOptions, ctx) - .ParseAndCheckScriptFile(filePath, content, rootInputFolder, onError) + ParseScript(parseOptions, ctx).ParseAndCheckScriptFile(filePath, content, rootInputFolder, onError) |> Transformations.generateReferences references |> Transformations.formatCodeSnippets filePath ctx |> Transformations.evaluateCodeSnippets ctx @@ -354,7 +351,8 @@ type Literate private () = /// Format the literate document as Latex without using a template static member ToLatex - (doc: LiterateDocument, ?prefix, ?lineNumbers, ?generateAnchors, ?substitutions, ?crefResolver, ?mdlinkResolver) = + (doc: LiterateDocument, ?prefix, ?lineNumbers, ?generateAnchors, ?substitutions, ?crefResolver, ?mdlinkResolver) + = let crefResolver = defaultArg crefResolver (fun _ -> None) let mdlinkResolver = defaultArg mdlinkResolver (fun _ -> None) diff --git a/src/FSharp.Formatting.Literate/Transformations.fs b/src/FSharp.Formatting.Literate/Transformations.fs index 3a8cdfe62..610d8d00b 100644 --- a/src/FSharp.Formatting.Literate/Transformations.fs +++ b/src/FSharp.Formatting.Literate/Transformations.fs @@ -471,12 +471,7 @@ module internal Transformations = // Split the formatted code into lines & emit line numbers in // (Similar to formatSnippets in FSharp.Formatting.CodeFormat\HtmlFormatting.fs) let lines = - code - .Trim('\r', '\n') - .Replace("\r\n", "\n") - .Replace("\n\r", "\n") - .Replace("\r", "\n") - .Split('\n') + code.Trim('\r', '\n').Replace("\r\n", "\n").Replace("\n\r", "\n").Replace("\r", "\n").Split('\n') let numberLength = lines.Length.ToString().Length let linesLength = lines.Length diff --git a/src/FSharp.Formatting.Markdown/Markdown.fs b/src/FSharp.Formatting.Markdown/Markdown.fs index 6cb5e6249..f208e4dab 100644 --- a/src/FSharp.Formatting.Markdown/Markdown.fs +++ b/src/FSharp.Formatting.Markdown/Markdown.fs @@ -148,7 +148,8 @@ type Markdown internal () = /// Transform the provided MarkdownDocument into LaTeX /// format and write the result to a given writer. static member WriteLatex - (doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver, ?lineNumbers) = + (doc: MarkdownDocument, writer, ?newline, ?substitutions, ?crefResolver, ?mdlinkResolver, ?lineNumbers) + = let newline = defaultArg newline Environment.NewLine let substitutions = defaultArg substitutions [] let crefResolver = defaultArg crefResolver (fun _ -> None) diff --git a/src/fsdocs-tool/BuildCommand.fs b/src/fsdocs-tool/BuildCommand.fs index 457c05301..539786a96 100644 --- a/src/fsdocs-tool/BuildCommand.fs +++ b/src/fsdocs-tool/BuildCommand.fs @@ -124,9 +124,7 @@ type internal DocContent Path.GetFullPath(Path.Combine(rootOutputFolderAsGiven, outputFolderRelativeToRoot)) let uri = - Uri(outputFolderFullPath + "/") - .MakeRelativeUri(Uri(markdownReferenceFullOutputPath)) - .ToString() + Uri(outputFolderFullPath + "/").MakeRelativeUri(Uri(markdownReferenceFullOutputPath)).ToString() Some uri with _ -> @@ -760,7 +758,7 @@ type internal DocContent [ // No categories specified if modelsByCategory.Length = 1 && (fst modelsByCategory.[0]) = None then - li [ Class "nav-header" ] [ !! "Documentation" ] + li [ Class "nav-header" ] [ !!"Documentation" ] for model in snd modelsByCategory.[0] do let link = model.Uri(root) @@ -783,7 +781,7 @@ type internal DocContent match cat with | Some c -> li [ Class $"nav-header %s{categoryActiveClass}" ] [ !!c ] - | None -> li [ Class $"nav-header %s{categoryActiveClass}" ] [ !! "Other" ] + | None -> li [ Class $"nav-header %s{categoryActiveClass}" ] [ !!"Other" ] for model in modelsInCategory do let link = model.Uri(root) diff --git a/tests/FSharp.Literate.Tests/LiterateTests.fs b/tests/FSharp.Literate.Tests/LiterateTests.fs index bd13e0c72..2c5f43216 100644 --- a/tests/FSharp.Literate.Tests/LiterateTests.fs +++ b/tests/FSharp.Literate.Tests/LiterateTests.fs @@ -355,10 +355,7 @@ var let formatted = FSharp.Formatting.CSharpFormat.SyntaxHighlighter.FormatHtml(html) - let expected = - html - .Replace(" lang=\"csharp\"", "") - .Replace("var", "var") + let expected = html.Replace(" lang=\"csharp\"", "").Replace("var", "var") formatted |> shouldEqual expected @@ -1559,12 +1556,7 @@ let ``pynb outputs passed to script correctly`` () = printfn "%s" fsx printfn "----" - let fsx2 = - fsx - .Replace("\r\n", "\n") - .Replace(" \n", "\n") - .Replace("\n\n*)", "\n*)") - .Replace("\n", "!") + let fsx2 = fsx.Replace("\r\n", "\n").Replace(" \n", "\n").Replace("\n\n*)", "\n*)").Replace("\n", "!") let expected = """(**