Skip to content

Commit

Permalink
Print trivia for SynExpr explicitly. (fsprojects#1688)
Browse files Browse the repository at this point in the history
* Print trivia for inferred casts. Fixes fsprojects#1685.

* Print trivia for SynExpr explicitly.
  • Loading branch information
nojaf committed Apr 30, 2021
1 parent 5ce8ab9 commit da572ef
Show file tree
Hide file tree
Showing 4 changed files with 176 additions and 1 deletion.
74 changes: 74 additions & 0 deletions src/Fantomas.Tests/CastTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,77 @@ let waitAndUpcast (x: Task<'t>) =
x.Result :?> AmazonWebServiceResponse
"""

[<Test>]
let ``trivia newline before inferred upcast, 1685`` () =
formatSourceString
false
"""
namespace Blah
module Foo =
let foo =
{ new IDisposable with
member __.Dispose () =
do ()
upcast ()
}
"""
{ config with
SpaceBeforeColon = true
SpaceBeforeSemicolon = true
IndentOnTryWith = true }
|> prepend newline
|> should
equal
"""
namespace Blah
module Foo =
let foo =
{ new IDisposable with
member __.Dispose() =
do ()
upcast () }
"""

[<Test>]
let ``trivia newline before inferred downcast`` () =
formatSourceString
false
"""
namespace Blah
module Foo =
let foo =
{ new IDisposable with
member __.Dispose () =
do ()
downcast ()
}
"""
{ config with
SpaceBeforeColon = true
SpaceBeforeSemicolon = true
IndentOnTryWith = true }
|> prepend newline
|> should
equal
"""
namespace Blah
module Foo =
let foo =
{ new IDisposable with
member __.Dispose() =
do ()
downcast () }
"""
40 changes: 40 additions & 0 deletions src/Fantomas.Tests/CommentTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1483,3 +1483,43 @@ let ``line comment after embedded il`` () =
"""
(# "" x : 'U #) // bar
"""

[<Test>]
let ``line comment before SynExpr.AddressOf`` () =
formatSourceString
false
"""
open FSharp.NativeInterop

let Main() =
let mutable x = 3.1415
// meh?
&&x
"""
config
|> prepend newline
|> should
equal
"""
open FSharp.NativeInterop

let Main () =
let mutable x = 3.1415
// meh?
&&x
"""

[<Test>]
let ``line comment after SynExpr.Null, 1676`` () =
formatSourceString
false
"""
let v = f null // comment
"""
config
|> prepend newline
|> should
equal
"""
let v = f null // comment
"""
25 changes: 25 additions & 0 deletions src/Fantomas.Tests/ComputationExpressionTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2403,3 +2403,28 @@ aggregateResult {
More = more }
}
"""

[<Test>]
let ``line comment above SynExpr.LetOrUseBang`` () =
formatSourceString
false
"""
let x =
async {
// bar
let! f = foo()
()
}
"""
config
|> prepend newline
|> should
equal
"""
let x =
async {
// bar
let! f = foo ()
()
}
"""
38 changes: 37 additions & 1 deletion src/Fantomas/CodePrinter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2600,7 +2600,43 @@ and genExpr astContext synExpr ctx =
| SynExpr.Do _ -> genTriviaFor SynExpr_Do synExpr.Range
| SynExpr.TypeApp _ -> genTriviaFor SynExpr_TypeApp synExpr.Range
| SynExpr.Lazy _ -> genTriviaFor SynExpr_Lazy synExpr.Range
| _ -> id)
| SynExpr.InferredUpcast _ -> genTriviaFor SynExpr_InferredUpcast synExpr.Range
| SynExpr.InferredDowncast _ -> genTriviaFor SynExpr_InferredDowncast synExpr.Range
| SynExpr.AddressOf _ -> genTriviaFor SynExpr_AddressOf synExpr.Range
| SynExpr.Null _ -> genTriviaFor SynExpr_Null synExpr.Range
| SynExpr.TraitCall _ -> genTriviaFor SynExpr_TraitCall synExpr.Range
| SynExpr.DotNamedIndexedPropertySet _ -> genTriviaFor SynExpr_DotNamedIndexedPropertySet synExpr.Range
| SynExpr.NamedIndexedPropertySet _ -> genTriviaFor SynExpr_NamedIndexedPropertySet synExpr.Range
| SynExpr.Set _ -> genTriviaFor SynExpr_Set synExpr.Range
| SynExpr.Quote _ -> genTriviaFor SynExpr_Quote synExpr.Range
| SynExpr.ArbitraryAfterError _ -> genTriviaFor SynExpr_ArbitraryAfterError synExpr.Range
| SynExpr.DiscardAfterMissingQualificationAfterDot _ ->
genTriviaFor SynExpr_DiscardAfterMissingQualificationAfterDot synExpr.Range
| SynExpr.DotSet _ -> genTriviaFor SynExpr_DotSet synExpr.Range
| SynExpr.Fixed _ -> genTriviaFor SynExpr_Fixed synExpr.Range
| SynExpr.FromParseError _ -> genTriviaFor SynExpr_FromParseError synExpr.Range
| SynExpr.ImplicitZero _ -> genTriviaFor SynExpr_ImplicitZero synExpr.Range
| SynExpr.LibraryOnlyStaticOptimization _ ->
genTriviaFor SynExpr_LibraryOnlyStaticOptimization synExpr.Range
| SynExpr.LibraryOnlyILAssembly _ -> genTriviaFor SynExpr_LibraryOnlyILAssembly synExpr.Range
| SynExpr.LibraryOnlyUnionCaseFieldGet _ -> genTriviaFor SynExpr_LibraryOnlyUnionCaseFieldGet synExpr.Range
| SynExpr.LibraryOnlyUnionCaseFieldSet _ -> genTriviaFor SynExpr_LibraryOnlyUnionCaseFieldSet synExpr.Range
| SynExpr.SequentialOrImplicitYield _ -> genTriviaFor SynExpr_SequentialOrImplicitYield synExpr.Range
| SynExpr.TypeTest _ -> genTriviaFor SynExpr_TypeTest synExpr.Range
| SynExpr.Const _ ->
// SynConst has trivia attached to it
id
| SynExpr.LetOrUse _
| SynExpr.Sequential _
| SynExpr.CompExpr _ ->
// first and last nested node has trivia attached to it
id
| SynExpr.LetOrUseBang _ ->
// printed as part of CompBody
id
| SynExpr.Typed _ ->
// child nodes contain trivia
id)

expr ctx

Expand Down

0 comments on commit da572ef

Please sign in to comment.