Skip to content

Commit

Permalink
genNode for patterns case by case. (#2644)
Browse files Browse the repository at this point in the history
  • Loading branch information
nojaf authored Dec 6, 2022
1 parent db42a5c commit 52a9418
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
21 changes: 21 additions & 0 deletions src/Fantomas.Core.Tests/DallasTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1803,3 +1803,24 @@ myFunction
arg3
)
"""

[<Test>]
let ``block comment after pattern constant`` () =
formatSourceString
false
"""
match tag with
| 0 (* None *) -> getInstancePropertyInfos (typ, [||], bindingFlags)
| 1 (* Some *) -> getInstancePropertyInfos (typ, [| "Value" |], bindingFlags)
| _ -> failwith "fieldsPropsOfUnionCase"
"""
config
|> prepend newline
|> should
equal
"""
match tag with
| 0 (* None *) -> getInstancePropertyInfos (typ, [||], bindingFlags)
| 1 (* Some *) -> getInstancePropertyInfos (typ, [| "Value" |], bindingFlags)
| _ -> failwith "fieldsPropsOfUnionCase"
"""
21 changes: 14 additions & 7 deletions src/Fantomas.Core/CodePrinter2.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2380,6 +2380,7 @@ let genPatLeftMiddleRight (node: PatLeftMiddleRight) =
| Choice2Of2 text -> !-text)
+> sepSpace
+> genPat node.RightHandSide
|> genNode node

let genTyparDecl (isFirstTypeParam: bool) (td: TyparDeclNode) =
genOnelinerAttributes td.Attributes
Expand All @@ -2405,23 +2406,25 @@ let genTyparDecls (td: TyparDecls) =
let genPat (p: Pattern) =
match p with
| Pattern.OptionalVal n -> genSingleTextNode n
| Pattern.Attrib node -> genOnelinerAttributes node.Attributes +> genPat node.Pattern
| Pattern.Attrib node -> genOnelinerAttributes node.Attributes +> genPat node.Pattern |> genNode node
| Pattern.Or node -> genPatLeftMiddleRight node
| Pattern.Ands node -> col (!- " & ") node.Patterns genPat
| Pattern.Ands node -> col (!- " & ") node.Patterns genPat |> genNode node
| Pattern.Null node
| Pattern.Wild node -> genSingleTextNode node
| Pattern.Typed node ->
genPat node.Pattern
+> sepColon
+> autoIndentAndNlnIfExpressionExceedsPageWidth (atCurrentColumnIndent (genType node.Type))
|> genNode node
| Pattern.NamedParenStarIdent node ->
genAccessOpt node.Accessibility
+> genSingleTextNode node.OpeningParen
+> sepSpace
+> genSingleTextNode node.Name
+> sepSpace
+> genSingleTextNode node.ClosingParen
| Pattern.Named node -> genAccessOpt node.Accessibility +> genSingleTextNode node.Name
|> genNode node
| Pattern.Named node -> genAccessOpt node.Accessibility +> genSingleTextNode node.Name |> genNode node
| Pattern.As node
| Pattern.ListCons node -> genPatLeftMiddleRight node
| Pattern.NamePatPairs node ->
Expand All @@ -2443,6 +2446,7 @@ let genPat (p: Pattern) =
+> genSingleTextNode node.OpeningParen
+> autoIndentAndNlnIfExpressionExceedsPageWidth (sepNlnWhenWriteBeforeNewlineNotEmpty +> pats)
+> genSingleTextNode node.ClosingParen
|> genNode node

| Pattern.LongIdent node ->
let genName =
Expand All @@ -2457,21 +2461,24 @@ let genPat (p: Pattern) =
addSpaceBeforeParenInPattern node.Identifier +> genPat parameter
| ps -> sepSpace +> atCurrentColumn (col sepSpace ps genPat)

genName +> genParameters
genName +> genParameters |> genNode node
| Pattern.Unit n -> genUnit n
| Pattern.Paren node ->
genSingleTextNode node.OpeningParen
+> genPat node.Pattern
+> genSingleTextNode node.ClosingParen
|> genNode node
| Pattern.Tuple node ->
expressionFitsOnRestOfLine
(col sepComma node.Patterns genPat)
(atCurrentColumn (col (sepComma +> sepNln) node.Patterns genPat))
|> genNode node
| Pattern.StructTuple node ->
!- "struct "
+> sepOpenT
+> atCurrentColumn (colAutoNlnSkip0 sepComma node.Patterns genPat)
+> sepCloseT
|> genNode node
| Pattern.ArrayOrList node ->
let genPats =
let short = colAutoNlnSkip0 sepSemi node.Patterns genPat
Expand All @@ -2493,6 +2500,7 @@ let genPat (p: Pattern) =
+> atCurrentColumn genPats
+> addSpaceIfSpaceAroundDelimiter
+> genSingleTextNode node.CloseToken)
|> genNode node
| Pattern.Record node ->
let smallRecordExpr =
genSingleTextNode node.OpeningNode
Expand Down Expand Up @@ -2523,11 +2531,10 @@ let genPat (p: Pattern) =

fun ctx ->
let size = getRecordSize ctx node.Fields
isSmallExpression size smallRecordExpr multilineExpressionIfAlignBrackets ctx
genNode node (isSmallExpression size smallRecordExpr multilineExpressionIfAlignBrackets) ctx
| Pattern.Const c -> genConstant c
| Pattern.IsInst node -> genSingleTextNode node.Token +> sepSpace +> genType node.Type
| Pattern.IsInst node -> genSingleTextNode node.Token +> sepSpace +> genType node.Type |> genNode node
| Pattern.QuoteExpr node -> genQuoteExpr node
|> genNode (Pattern.Node p)

let genPatInClause (pat: Pattern) =
let rec genPatMultiline p =
Expand Down

0 comments on commit 52a9418

Please sign in to comment.