From 671b780a09f630aae9e7258c264f55b1d0694f6b Mon Sep 17 00:00:00 2001 From: nojaf Date: Sat, 16 Dec 2023 16:12:52 +0100 Subject: [PATCH] Also add additional spaces for update record. --- CHANGELOG.md | 3 ++ .../CrampedMultilineBracketStyleTests.fs | 42 ++++++++++++++++++- src/Fantomas.Core/CodePrinter.fs | 19 +++++---- 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08073bc3d4..4681412e53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ### Changed * Turn on strict indentation in the lexer in Fantomas.FCS. [#3014](https://github.com/fsprojects/fantomas/pull/3014) +### Fixed +* Unmatched '{' error when formatting the code. [#3017](https://github.com/fsprojects/fantomas/issues/3017) + ## 6.3.0-alpha-004 - 2023-12-06 ### Fixed diff --git a/src/Fantomas.Core.Tests/CrampedMultilineBracketStyleTests.fs b/src/Fantomas.Core.Tests/CrampedMultilineBracketStyleTests.fs index cb56e57ed9..4f85fa7269 100644 --- a/src/Fantomas.Core.Tests/CrampedMultilineBracketStyleTests.fs +++ b/src/Fantomas.Core.Tests/CrampedMultilineBracketStyleTests.fs @@ -673,6 +673,46 @@ let person = () " +[] +let ``multiline string before closing brace with update record, 3017`` () = + formatSourceString + " +let FableSampleExpected :Changelogs = { + Unreleased = Some { + ChangelogData.Default with + Fixed = + normalizeNewline + \"\"\"#### Python +\"\"\" + } + Releases = [ + Some { + ChangelogData.Default with + Changed = + normalizeNewline \"\" + } + ] +} +" + config + |> prepend newline + |> should + equal + " +let FableSampleExpected: Changelogs = + { Unreleased = + Some + { ChangelogData.Default with + Fixed = + normalizeNewline + \"\"\"#### Python +\"\"\" } + Releases = + [ Some + { ChangelogData.Default with + Changed = normalizeNewline \"\" } ] } +" + [] let ``issue 457`` () = formatSourceString @@ -828,7 +868,7 @@ module Maintoc = [ Doc.Verbatim \"\"\" This is a very long line in a multi-line string, so long in fact that it is longer than that page width to which I am trying to constrain everything, and so it goes bang. -\"\"\" ] } +\"\"\" ] } " [] diff --git a/src/Fantomas.Core/CodePrinter.fs b/src/Fantomas.Core/CodePrinter.fs index 98b007d171..42f5474b19 100644 --- a/src/Fantomas.Core/CodePrinter.fs +++ b/src/Fantomas.Core/CodePrinter.fs @@ -1739,26 +1739,27 @@ let genMultilineRecord (node: ExprRecordNode) (ctx: Context) = +> genRecordFieldNameCramped false e) ctx + // Edge case scenario to make sure that the closing brace is not before the opening one + // See unit test "multiline string before closing brace" + let genClosingBrace ctx = + let genClosingBrace = + addFixedSpaces expressionStartColumn +> genSingleTextNode node.ClosingBrace + + ifElseCtx lastWriteEventIsNewline genClosingBrace (addSpaceIfSpaceAroundDelimiter +> genClosingBrace) ctx + match node.CopyInfo with | Some _ -> genSingleTextNode node.OpeningBrace +> sepNlnWhenWriteBeforeNewlineNotEmptyOr addSpaceIfSpaceAroundDelimiter // comment after curly brace +> genFields - +> addSpaceIfSpaceAroundDelimiter - +> genSingleTextNode node.ClosingBrace + +> genClosingBrace | None -> atCurrentColumn ( genSingleTextNodeSuffixDelimiter node.OpeningBrace +> sepNlnWhenWriteBeforeNewlineNotEmpty // comment after curly brace +> genFields +> sepNlnWhenWriteBeforeNewlineNotEmpty - +> (fun ctx -> - // Edge case scenario to make sure that the closing brace is not before the opening one - // See unit test "multiline string before closing brace" - let brace = - addFixedSpaces expressionStartColumn +> genSingleTextNode node.ClosingBrace - - ifElseCtx lastWriteEventIsNewline brace (addSpaceIfSpaceAroundDelimiter +> brace) ctx) + +> genClosingBrace ) ifAlignOrStroustrupBrackets genMultilineAlignBrackets genMultilineCramped ctx