Skip to content

Commit 032e994

Browse files
author
Josh DeGraw
committed
Inline some one-off functions
1 parent 3595df5 commit 032e994

File tree

1 file changed

+121
-125
lines changed

1 file changed

+121
-125
lines changed

src/Fantomas.Core/CodePrinter.fs

Lines changed: 121 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -461,23 +461,99 @@ let genExpr (e: Expr) =
461461
isSmallExpression size smallExpression multilineExpression ctx
462462
|> genNode node
463463
| Expr.Record node ->
464-
let smallRecordExpr = genSmallCopyableRecordNode node
465-
let genCrampedFields = genMultilineStandardRecordExprCrampedFields node
464+
let smallRecordExpr = genSmallRecordNode node
465+
466+
let genCrampedFields targetColumn =
467+
match node.CopyInfo with
468+
| Some we -> genRecordCopyExpr (genMultilineRecordFieldsExpr node) we
469+
| None ->
470+
fun (ctx: Context) ->
471+
col
472+
sepNln
473+
node.Fields
474+
(fun e ->
475+
// Add spaces to ensure the record field (incl trivia) starts at the right column.
476+
addFixedSpaces targetColumn
477+
// Lock the start of the record field, however keep potential indentations in relation to the opening curly brace
478+
+> atCurrentColumn (genRecordFieldName e))
479+
ctx
480+
466481
let multilineRecordExpr = genMultilineRecord genCrampedFields node
467482
genRecord smallRecordExpr multilineRecordExpr node
468483
| Expr.AnonRecord node ->
469484
let genStructPrefix = onlyIf node.IsStruct !- "struct "
470-
let smallRecordExpr = genStructPrefix +> genSmallCopyableRecordNode node
471-
let genCrampedFields = genMultilineAnonRecordCrampedFields node
485+
let smallRecordExpr = genStructPrefix +> genSmallRecordNode node
486+
487+
let genMultilineAnonCrampedFields targetColumn =
488+
match node.CopyInfo with
489+
| Some we ->
490+
atCurrentColumn (
491+
genExpr we
492+
+> (!- " with" +> indentSepNlnUnindent (genMultilineRecordFieldsExpr node))
493+
)
494+
| None ->
495+
fun (ctx: Context) ->
496+
col
497+
sepNln
498+
node.Fields
499+
(fun fieldNode ->
500+
let genNode =
501+
if ctx.Config.IndentSize < 3 then
502+
sepSpaceOrDoubleIndentAndNlnIfExpressionExceedsPageWidth
503+
else
504+
sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth
505+
506+
// Add spaces to ensure the record field (incl trivia) starts at the right column.
507+
addFixedSpaces targetColumn
508+
+> atCurrentColumn (enterNode fieldNode +> genIdentListNode fieldNode.FieldName)
509+
+> sepSpace
510+
+> genSingleTextNode fieldNode.Equals
511+
+> genNode (genExpr fieldNode.Expr)
512+
+> leaveNode fieldNode)
513+
ctx
472514

473515
let multilineRecordExpr =
474-
genStructPrefix +> genMultilineRecord genCrampedFields node
516+
genStructPrefix +> genMultilineRecord genMultilineAnonCrampedFields node
475517

476518
genRecord smallRecordExpr multilineRecordExpr node
477519
| Expr.InheritRecord node ->
478-
let smallRecordExpr = genSmallInheritRecordExpr node
479-
let multilineRecordExpr = genMultilineInheritRecordInstance node
480-
genRecord smallRecordExpr multilineRecordExpr node
520+
let genSmallInheritRecordExpr =
521+
genSmallRecordBaseExpr
522+
((genSingleTextNode node.InheritConstructor.InheritKeyword
523+
+> sepSpace
524+
+> genInheritConstructor node.InheritConstructor
525+
|> genNode (InheritConstructor.Node node.InheritConstructor))
526+
+> onlyIf node.HasFields sepSemi)
527+
node
528+
529+
let genMultilineInheritRecordExpr =
530+
let fieldsExpr = genMultilineRecordFieldsExpr node
531+
532+
let genInheritInfo =
533+
(genSingleTextNode node.InheritConstructor.InheritKeyword
534+
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (genInheritConstructor node.InheritConstructor)
535+
|> genNode (InheritConstructor.Node node.InheritConstructor))
536+
+> onlyIf node.HasFields sepNln
537+
538+
let genMultilineAlignBrackets =
539+
genSingleTextNode node.OpeningBrace
540+
+> indentSepNlnUnindent (genInheritInfo +> fieldsExpr)
541+
+> sepNln
542+
+> genSingleTextNode node.ClosingBrace
543+
544+
let genMultilineCramped =
545+
genSingleTextNode node.OpeningBrace
546+
+> addSpaceIfSpaceAroundDelimiter
547+
+> atCurrentColumn (
548+
genInheritInfo
549+
+> fieldsExpr
550+
+> addSpaceIfSpaceAroundDelimiter
551+
+> genSingleTextNode node.ClosingBrace
552+
)
553+
554+
ifAlignOrStroustrupBrackets genMultilineAlignBrackets genMultilineCramped
555+
556+
genRecord genSmallInheritRecordExpr genMultilineInheritRecordExpr node
481557
| Expr.ObjExpr node ->
482558
let param = optSingle genExpr node.Expr
483559

@@ -1530,7 +1606,15 @@ let genExpr (e: Expr) =
15301606
| Expr.IndexFromEnd node -> !- "^" +> genExpr node.Expr |> genNode node
15311607
| Expr.Typar node -> genSingleTextNode node
15321608

1533-
let genCopyExpr fieldsExpr ci =
1609+
let genQuoteExpr (node: ExprQuoteNode) =
1610+
genSingleTextNode node.OpenToken
1611+
+> sepSpace
1612+
+> expressionFitsOnRestOfLine (genExpr node.Expr) (indent +> sepNln +> genExpr node.Expr +> unindent +> sepNln)
1613+
+> sepSpace
1614+
+> genSingleTextNode node.CloseToken
1615+
|> genNode node
1616+
1617+
let genRecordCopyExpr fieldsExpr ci =
15341618
atCurrentColumnIndent (genExpr ci)
15351619
+> !- " with"
15361620
+> indent
@@ -1547,131 +1631,24 @@ let genRecordFieldName (node: RecordFieldNode) =
15471631
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup genExpr node.Expr
15481632
|> genNode node
15491633

1550-
let genQuoteExpr (node: ExprQuoteNode) =
1551-
genSingleTextNode node.OpenToken
1552-
+> sepSpace
1553-
+> expressionFitsOnRestOfLine (genExpr node.Expr) (indent +> sepNln +> genExpr node.Expr +> unindent +> sepNln)
1554-
+> sepSpace
1555-
+> genSingleTextNode node.CloseToken
1556-
|> genNode node
1557-
1558-
let genFieldsExpr (node: ExprRecordBaseNode) =
1634+
let genMultilineRecordFieldsExpr (node: ExprRecordBaseNode) =
15591635
col sepNln node.Fields genRecordFieldName
15601636

1561-
let private genSmallRecordExpr genExtra (node: ExprRecordBaseNode) =
1637+
let genSmallRecordBaseExpr genExtra (node: ExprRecordBaseNode) =
15621638
genSingleTextNode node.OpeningBrace
15631639
+> addSpaceIfSpaceAroundDelimiter
15641640
+> genExtra
15651641
+> col sepSemi node.Fields genRecordFieldName
15661642
+> addSpaceIfSpaceAroundDelimiter
15671643
+> genSingleTextNode node.ClosingBrace
15681644

1569-
let genSmallCopyableRecordNode (node: ExprRecordNode) =
1570-
genSmallRecordExpr
1645+
let genSmallRecordNode (node: ExprRecordNode) =
1646+
genSmallRecordBaseExpr
15711647
(match node.CopyInfo with
15721648
| Some we -> genExpr we +> !- " with "
15731649
| None -> sepNone)
15741650
node
15751651

1576-
let genSmallInheritRecordExpr (node: ExprInheritRecordNode) =
1577-
genSmallRecordExpr
1578-
((genSingleTextNode node.InheritConstructor.InheritKeyword
1579-
+> sepSpace
1580-
+> genInheritConstructor node.InheritConstructor
1581-
|> genNode (InheritConstructor.Node node.InheritConstructor))
1582-
+> onlyIf node.HasFields sepSemi)
1583-
node
1584-
1585-
let genMultilineInheritRecordInstance (node: ExprInheritRecordNode) =
1586-
let fieldsExpr = genFieldsExpr node
1587-
1588-
let genInheritInfo =
1589-
(genSingleTextNode node.InheritConstructor.InheritKeyword
1590-
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (genInheritConstructor node.InheritConstructor)
1591-
|> genNode (InheritConstructor.Node node.InheritConstructor))
1592-
+> onlyIf node.HasFields sepNln
1593-
1594-
let genMultilineAlignBrackets =
1595-
genSingleTextNode node.OpeningBrace
1596-
+> indentSepNlnUnindent (genInheritInfo +> fieldsExpr)
1597-
+> sepNln
1598-
+> genSingleTextNode node.ClosingBrace
1599-
1600-
let genMultilineCramped =
1601-
genSingleTextNode node.OpeningBrace
1602-
+> addSpaceIfSpaceAroundDelimiter
1603-
+> atCurrentColumn (
1604-
genInheritInfo
1605-
+> fieldsExpr
1606-
+> addSpaceIfSpaceAroundDelimiter
1607-
+> genSingleTextNode node.ClosingBrace
1608-
)
1609-
1610-
ifAlignOrStroustrupBrackets genMultilineAlignBrackets genMultilineCramped
1611-
1612-
let genMultilineRecordAlignBrackets (node: ExprRecordNode) =
1613-
let fieldsExpr = genFieldsExpr node
1614-
1615-
match node.CopyInfo with
1616-
| Some ci ->
1617-
genSingleTextNodeSuffixDelimiter node.OpeningBrace
1618-
+> ifElseCtx
1619-
(fun ctx -> ctx.Config.IsStroustrupStyle)
1620-
(indent +> sepNln)
1621-
sepNlnWhenWriteBeforeNewlineNotEmpty // comment after curly brace
1622-
+> genCopyExpr fieldsExpr ci
1623-
+> onlyIfCtx (fun ctx -> ctx.Config.IsStroustrupStyle) unindent
1624-
+> sepNln
1625-
+> genSingleTextNode node.ClosingBrace
1626-
// genSingleTextNode node.OpeningBrace
1627-
// +> sepNlnWhenWriteBeforeNewlineNotEmptyOr addSpaceIfSpaceAroundDelimiter // comment after curly brace
1628-
// +> genCopyExpr fieldsExpr we
1629-
// +> sepNln
1630-
// +> genSingleTextNode node.ClosingBrace
1631-
| None ->
1632-
genSingleTextNode node.OpeningBrace
1633-
+> indentSepNlnUnindent fieldsExpr
1634-
+> ifElseCtx lastWriteEventIsNewline sepNone sepNln
1635-
+> genSingleTextNode node.ClosingBrace
1636-
1637-
let genMultilineAnonRecordCrampedFields (node: ExprAnonRecordNode) targetColumn =
1638-
match node.CopyInfo with
1639-
| Some we -> atCurrentColumn (genExpr we +> (!- " with" +> indentSepNlnUnindent (genFieldsExpr node)))
1640-
| None ->
1641-
fun (ctx: Context) ->
1642-
col
1643-
sepNln
1644-
node.Fields
1645-
(fun fieldNode ->
1646-
let genNode =
1647-
if ctx.Config.IndentSize < 3 then
1648-
sepSpaceOrDoubleIndentAndNlnIfExpressionExceedsPageWidth
1649-
else
1650-
sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth
1651-
1652-
// Add spaces to ensure the record field (incl trivia) starts at the right column.
1653-
addFixedSpaces targetColumn
1654-
+> atCurrentColumn (enterNode fieldNode +> genIdentListNode fieldNode.FieldName)
1655-
+> sepSpace
1656-
+> genSingleTextNode fieldNode.Equals
1657-
+> genNode (genExpr fieldNode.Expr)
1658-
+> leaveNode fieldNode)
1659-
ctx
1660-
1661-
let genMultilineStandardRecordExprCrampedFields (node: ExprRecordNode) targetColumn =
1662-
match node.CopyInfo with
1663-
| Some we -> genCopyExpr (genFieldsExpr node) we
1664-
| None ->
1665-
fun (ctx: Context) ->
1666-
col
1667-
sepNln
1668-
node.Fields
1669-
(fun e ->
1670-
// Add spaces to ensure the record field (incl trivia) starts at the right column.
1671-
addFixedSpaces targetColumn
1672-
// Lock the start of the record field, however keep potential indentations in relation to the opening curly brace
1673-
+> atCurrentColumn (genRecordFieldName e))
1674-
ctx
16751652

16761653
let genMultilineRecord genCrampedFields (node: ExprRecordNode) (ctx: Context) =
16771654
let expressionStartColumn = ctx.Column
@@ -1685,6 +1662,26 @@ let genMultilineRecord genCrampedFields (node: ExprRecordNode) (ctx: Context) =
16851662
else
16861663
openBracketLength)
16871664

1665+
let genMultilineAlignBrackets =
1666+
let fieldsExpr = genMultilineRecordFieldsExpr node
1667+
1668+
match node.CopyInfo with
1669+
| Some ci ->
1670+
genSingleTextNodeSuffixDelimiter node.OpeningBrace
1671+
+> ifElseCtx
1672+
(fun ctx -> ctx.Config.IsStroustrupStyle)
1673+
(indent +> sepNln)
1674+
sepNlnWhenWriteBeforeNewlineNotEmpty // comment after curly brace
1675+
+> genRecordCopyExpr fieldsExpr ci
1676+
+> onlyIfCtx (fun ctx -> ctx.Config.IsStroustrupStyle) unindent
1677+
+> sepNln
1678+
+> genSingleTextNode node.ClosingBrace
1679+
| None ->
1680+
genSingleTextNode node.OpeningBrace
1681+
+> indentSepNlnUnindent fieldsExpr
1682+
+> ifElseCtx lastWriteEventIsNewline sepNone sepNln
1683+
+> genSingleTextNode node.ClosingBrace
1684+
16881685
let genMultilineCramped =
16891686
match node.CopyInfo with
16901687
| Some _ ->
@@ -1708,12 +1705,11 @@ let genMultilineRecord genCrampedFields (node: ExprRecordNode) (ctx: Context) =
17081705
ifElseCtx lastWriteEventIsNewline brace (addSpaceIfSpaceAroundDelimiter +> brace) ctx)
17091706
)
17101707

1711-
ifAlignOrStroustrupBrackets (genMultilineRecordAlignBrackets node) genMultilineCramped ctx
1708+
ifAlignOrStroustrupBrackets genMultilineAlignBrackets genMultilineCramped ctx
17121709

1713-
let genRecord smallRecordExpr multilineRecordExpr (node: ExprRecordBaseNode) =
1714-
fun ctx ->
1715-
let size = getRecordSize ctx node.Fields
1716-
genNode node (isSmallExpression size smallRecordExpr multilineRecordExpr) ctx
1710+
let genRecord smallRecordExpr multilineRecordExpr (node: ExprRecordBaseNode) ctx =
1711+
let size = getRecordSize ctx node.Fields
1712+
genNode node (isSmallExpression size smallRecordExpr multilineRecordExpr) ctx
17171713

17181714
let genMultilineFunctionApplicationArguments (argExpr: Expr) =
17191715
let argsInsideParenthesis (parenNode: ExprParenNode) f =

0 commit comments

Comments
 (0)