From b4ccb7b876b418b62e5392cd821fb750b6919d77 Mon Sep 17 00:00:00 2001 From: Florian Verdonck Date: Tue, 25 May 2021 12:30:08 +0200 Subject: [PATCH] Keep track of newline inside trivia via special event WriteLineInsideTrivia. Fixes #1538. (#1752) --- src/Fantomas.Tests/ColMultilineItemTests.fs | 25 +++++++++++++++++++++ src/Fantomas/Context.fs | 11 +++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Fantomas.Tests/ColMultilineItemTests.fs b/src/Fantomas.Tests/ColMultilineItemTests.fs index d823825ddb..2817c19382 100644 --- a/src/Fantomas.Tests/ColMultilineItemTests.fs +++ b/src/Fantomas.Tests/ColMultilineItemTests.fs @@ -527,3 +527,28 @@ let a = p let i = 0 let y = p """ + +[] +let ``two short application followed by trailing block comment, 1538`` () = + formatSourceString + false + """ +printfn "%s" @"c:\def\ghi\jkl" +printfn "%s" "c:\\def\\ghi\\jkl" + +(* +xyz +*) +""" + config + |> prepend newline + |> should + equal + """ +printfn "%s" @"c:\def\ghi\jkl" +printfn "%s" "c:\\def\\ghi\\jkl" + +(* +xyz +*) +""" diff --git a/src/Fantomas/Context.fs b/src/Fantomas/Context.fs index 741805f33b..25b6a4fd70 100644 --- a/src/Fantomas/Context.fs +++ b/src/Fantomas/Context.fs @@ -15,6 +15,7 @@ type WriterEvent = | WriteLineInsideStringConst | WriteBeforeNewline of string | WriteLineBecauseOfTrivia + | WriteLineInsideTrivia | IndentBy of int | UnIndentBy of int | SetIndent of int @@ -94,7 +95,8 @@ module WriterModel = match cmd with | WriteLine | WriteLineBecauseOfTrivia -> doNewline m - | WriteLineInsideStringConst -> + | WriteLineInsideStringConst + | WriteLineInsideTrivia -> { m with Lines = "" :: m.Lines Column = 0 } @@ -150,9 +152,14 @@ module WriterEvents = let normalize ev = match ev with | Write s when s.Contains("\n") -> + let writeLine = + match ev with + | CommentOrDefineEvent _ -> WriteLineInsideTrivia + | _ -> WriteLineInsideStringConst + s.Split('\n') |> Seq.map (fun x -> [ Write x ]) - |> Seq.reduce (fun x y -> x @ [ WriteLineInsideStringConst ] @ y) + |> Seq.reduce (fun x y -> x @ [ writeLine ] @ y) |> Seq.toList | _ -> [ ev ]